Преобразование массива массивов в массив объектов с сопоставленными свойствами - PullRequest
1 голос
/ 03 октября 2019

Каков наилучший способ преобразования массива массивов в объекты, чтобы индексы были заменены заданными свойствами отображения.

Например:

let cars = [
    [1, "Honda", "Honda description here"],
    [2, "Mercedes", "Mercedes description here"],
    [3, "Toyota", "Toyota description here"],
];

let mapping = {
    0: 'id',
    1: 'name',
    2: 'description',
};

Итак, конечный результат:

[
    {id: 1, name: 'Honda', description: 'Honda description here'},
    {id: 2, name: 'Mercedes', description: 'Mercedes description here'},
    {id: 3, name: 'Toyota', description: 'Toyota description here'},
];

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Вы можете получить объединенный результат, используя комбинацию:

  1. [].map() в массиве cars для циклического перебора его элементов.
  2. [].reduce() на каждомЭлемент car для уменьшения значения «три» в один объект, используя упорядоченность, установленную в объекте mapping.

Вот решение, которое можно сократить до однострочного:

let cars = [
    [1, "Honda", "Honda description here"],
    [2, "Mercedes", "Mercedes description here"],
    [3, "Toyota", "Toyota description here"],
];
let mapping = {
    0: 'id',
    1: 'name',
    2: 'description',
};
let result = cars.map((car) => (
    car.reduce((acc, cur, i) => (
        Object.assign(acc, { [mapping[i]]: cur })
    ), {})
));

console.log(result);
1 голос
/ 03 октября 2019

Используйте команду map. Примечание: этот код предполагает наличие сопоставлений для каждого элемента массива.

let cars = [
    [1, "Honda", "Honda description here"],
    [2, "Mercedes", "Mercedes description here"],
    [3, "Toyota", "Toyota description here"],
];

let mapping = {
    0: 'id',
    1: 'name',
    2: 'description',
};

let result = cars.map(a => {
  let obj = {};
  a.forEach((v,i) => {
    obj[mapping[i]] = v;
  });
  return obj;
});

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...