Преобразовать 2 массива в объект значения ключа javascript - PullRequest
0 голосов
/ 27 марта 2020

У меня есть массив с заголовками - скажем, ["language", "name", "code"] и массив массивов значений - например, [["English", "Matt", "2D"], ["Croatian", "Dana", "8S"], ["Russian", "Ivan", "2W"]].

Я пытаюсь получить массив объектов, например, так:

[ 
  {language: English, name: Matt, code: 2D}, 
  {language: Croatian, name: Dana, code: 8S}, 
  {language: Russian, name: Ivan, code: 2W} 
]

Есть ли какой-нибудь элегантный способ сделать это без вложенных циклов?

Ответы [ 4 ]

0 голосов
/ 27 марта 2020

Вы можете создать это без сложности, если количество данных постоянно, используя ES6 *

var dataList = [["English", "Matt", "2D"], ["Croatian", "Dana", "8S"], ["Russian", "Ivan", "2W"]];
    let myList = [];
    for([language, name, code] of dataList)
      myList.push({language, name, code});
    console.log(myList);
0 голосов
/ 27 марта 2020

Вы можете использовать деструктуризацию массива (при условии, что вы уверены, что ваш формат данных остается прежним):

const newArr = [];
for(const [language, name, code] of yourDataArray){
  //do whatever you want with the variables language, name, code
  newArr.push({
    language: language,
    name: name,
    code: code
  })
}
0 голосов
/ 27 марта 2020

let props=["language", "name", "code"];
let data=[["English", "Matt", "2D"], ["Croatian", "Dana", "8S"], ["Russian", "Ivan", "2W"]];
let result=data.map( (innerArray) =>{let obj={};innerArray.forEach( (innerData,index) =>{obj[props[index]]=innerData;});return obj;
});
console.log(result);
0 голосов
/ 27 марта 2020
const props = ["language", "name", "code"];
const values = [["English", "Matt", "2D"], ["Croatian", "Dana", "8S"], ["Russian", "Ivan", "2W"]];
const formatted = values.map(value => ({
  [props[0]]: value[0],
  [props[1]]: value[1],
  [props[2]]: value[2],
}));

Или вот так:

const formatted4 = values.map(value => {
  let v = {};
  props.forEach((prop, i) => {
    v = {
      ...v,
      [prop]: value[i]
    }
  });
  return v;
});
...