массив + матрица = массив объектов - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть два массива:

arr1 = [name, speed, power, energy];
arr2 = [
  [Ed, 10, 20, 30],
  [Robert, 15, 25, 35],
  [Paul, 8, 18, 28]
];

Как я могу объединить два массива в массив объектов, используя первый массив для ключей и второй для значений?

arr3 = [
  {
    name: "Ed",
    speed:"10",
    power:"20",
    energy:"30"
  },
  {
    name: "Robert",
    speed:"15",
    power:"25",
    energy:"35"
  },
  {
    name: "Paul,
    speed:"8",
    power:"18",
    energy:"28"
  }
];

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Во-первых, я предполагаю, что токены name, speed, power, energy на самом деле являются строками, и вы забыли включить кавычки.

Метод Object.fromEntries принимает массив кортежей (двухэлементных массивов) и преобразует его в объект.

Если мы заархивируем ключи из arr1 значениями из каждого массива в arr2, мы сможем получить желаемое отображение.

arr1 = ["name", "speed", "power", "energy"];
arr2 = [["Ed", 10, 20, 30],["Robert", 15, 25, 35],["Paul", 8, 18, 28]];
arr3 = arr2.map(objArr =>
    Object.fromEntries(arr1.map((key, i) => 
        [key, objArr[i]] // key-value tuple
    ))
)
console.log(arr3);
1 голос
/ 12 апреля 2020

Вы можете просто создать массив объектов, используя map

arr2.map(row => {
 const name = item[0];
 const speed = item[1];
 const power = item[2];
 const energy = item[3];
 return { name, speed, power, energy }
})

Запуск этого на вашем данном arr2 дает следующий результат

var arr2 = [['Ed', 10, 20, 30],['Robert', 15, 25, 35],['Paul', 8, 18, 28]];

var arr3 = arr2.map(row => {
 const name = item[0];
 const speed = item[1];
 const power = item[2];
 const energy = item[3];
 return { name, speed, power, energy }
});

console.log(arr3)
// arr3 = [
//  {name: "Ed", speed:10, power:20, energy:30},
//  {name: "Robert", speed:15, power:25, energy:35},
//  {name: "Paul", speed:8, power:18, energy:28}
// ]

0 голосов
/ 12 апреля 2020

Ruby имеет этот действительно полезный метод, называемый zip, так что вы хотите в основном это для каждого из arr2, но в JavaScript. Другими словами, zip arr1 ключи со свойствами каждого человека.

Ниже приведен фрагмент, который реализует функцию basi c zip, а затем использует ее для создания объекта в формате, который вы ищете для:

arr1 = ["name", "speed", "power", "energy"];
arr2 = [
  ["Ed", 10, 20, 30],
  ["Robert", 15, 25, 35],
  ["Paul", 8, 18, 28],
];

Array.prototype.zip = function(a) {
  return this.map((k, i) => [k, a[i]]);
};

arr3 = arr2.map(p => Object.fromEntries(arr1.zip(p)));

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