问题描述
我试图将数组元素循环到对象中。我尝试了给定的方法,但出现了一些错误。循环对象键及其基于数组的值。
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,假设headings
,dataHeading
和data
的长度与您可以做的相同:
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个错误:
- 一种
heading[i]
错字,由于不是大错而可以忽略。 - 您正在动态创建对象属性,因此应使用
[]
表示法。 More info - 您在每次迭代中都更改了
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);