使用JavaScript将数组数据循环到对象中

问题描述

我试图将数组元素循环到对象中。我尝试了给定的方法,但出现了一些错误。循环对象键及其基于数组的值。

let headings = ['sam','ram','ham'.....];
let dataheading = ['headingOne','headingTwo','headingThree'....];
let data = ['one','two','three'.....];

let finaldata;
for(let i=0; i<headings.length; i++){
  finaldata = {
    heading[i]: {
      dataheading[i] : data[i]
    }
  }
}

console.log(finaldata);


//what i want as a output is

{
  sam: {
    headingOne: one
  },ram: {
    headingTwo: two
  },ham: {
    headingThree : three
  }
}  

解决方法

您需要为所需属性分配一个对象,并为对象添加一个computed property names

words

,

Ciao,假设headingsdataHeadingdata的长度与您可以做的相同:

let headings = ['sam','ram','ham'];
let dataHeading = ['headingOne','headingTwo','headingThree'];
let data = ['one','two','three'];
let finaldata = {};
for(let i=0 ; i<headings.length;i++) {
   finaldata[headings[i]] = {};
   finaldata[headings[i]][dataHeading[i]] = data[i];
}
console.log(finaldata);

,

对于动态属性名称,您可以将其包装在方括号[]

let headings = ['sam','ham']
let dataHeading = ['headingOne','headingThree']
let data = ['one','three']

let finaldata = {}
for (let i = 0; i < headings.length; i++) {
  Object.assign(finaldata,{
    [headings[i]]: {
      [dataHeading[i]]: data[i]
    }
  })
}

console.log(finaldata)

,

您的代码中存在3个错误:

  1. 一种heading[i]错字,由于不是大错而可以忽略。
  2. 您正在动态创建对象属性,因此应使用[]表示法。 More info
  3. 您在每次迭代中都更改了finaldata
finaldata = {

heading[i] : { 
dataHeading[i] : data[i]
}
}

因为只有这最后一个元素,即ham"headingThree": "three",即{ham:{"headingThree": "three"}}一起存储,如果遵循了步骤2

let headings = ['sam','three'];

let finaldata = {};
for (let i = 0; i < headings.length; i++) {

  finaldata[headings[i]] = {
    [dataHeading[i]]: data[i]
  }
}
console.log(finaldata)

,

一个选择可能是先将所有数组压缩在一起,以获得一个二维数组,如下所示:

[['sam','headingOne','one'],['ram','two'],...]

完成后,您可以映射每个压缩数组并使用.reduceRight()来构建嵌套对象。这会将上面的数组转换为对象数组:

[
  {'sam': {'headingOne': 'one'}},{'ram': {'headingTwo','two'}},...
]

最后,您可以将Object.assign()spread syntax结合使用,以将数组中的所有对象合并为结果对象:

{
  'sam': {'headingOne': 'one'},'ram': {'headingTwo','two'},...
}

请参见以下示例:

let headings = ['sam','three'];

const zip = (...arrs) => arrs[0].map((_,i) => arrs.map(arr => arr[i]))
const makeNestedObj = arr => arr.reduceRight((obj,k) => ({[k]: obj}));

const arrObjs = zip(headings,dataHeading,data).map(makeNestedObj);
const res = Object.assign({},...arrObjs);
console.log(res);

,

var myObject = {},countryList = ["United Kingdom","France"],marketList = ["primary","secondary","service"],data = ["one","two","three"],i,p;

for (var i = 0; i < countryList.length; i++) {
    myObject[countryList[i]] = {};
    for (p = 0; p < marketList.length; p++) {
        myObject[countryList[i]][marketList[p]] = data[p];
    }
}

console.log(myObject);