Обращение к объекту в массиве

b и a это объекты и мне нужно в название их свойств вставлять название свойства другого объекта, вот функция:

sortBy(index) {
      this.columns.forEach((col) => {
        this.data.sort((a, b) => {
          return b[col[index].field].localeCompare(a[col[index].field]);        
        });
      });
    },

this.data

data: [
        {
          id: 1,
          fullname: "Kenyon Estrada",
          email: "[email protected]",
        },
        {
          id: 1312,
          fullname: "Paris Stanley",
          email: "[email protected]",
        },
        {
          id: 14214,
          fullname: "Allen Giles",
          email: "[email protected]",
        },
      ],

Массив объектов выглядит так:

columns: [
        {
          field: "id",
          label: "Id",
        },
        {
          field: "fullname",
          label: "Full Name",
        },
        {
          field: "email",
          label: "Email",
        },
      ],

Нужно чтобы свойство field подставлялось в объекты b и a, сейчас выдает ошибку: Cannot read property 'field' of undefined Что я делаю неправильно?


Ответы (1 шт):

Автор решения: Stepan Kasyanenko

Возможно, вам нужно что-то вроде этого. Кстати, localeCompare не работает для чисел.

const data = [{
    id: 1,
    fullname: "Kenyon Estrada",
    email: "[email protected]",
  },
  {
    id: 1312,
    fullname: "Paris Stanley",
    email: "[email protected]",
  },
  {
    id: 14214,
    fullname: "Allen Giles",
    email: "[email protected]",
  },
];

const columns = [{
    field: "id",
    label: "Id",
  },
  {
    field: "fullname",
    label: "Full Name",
  },
  {
    field: "email",
    label: "Email",
  },
];

function sortBy(index) {
  return data.sort((a, b) => {
    return b[columns[index].field].localeCompare(a[columns[index].field]);
  });
};

console.log(sortBy(1));
console.log(sortBy(2));

→ Ссылка