我有两个数组键和subGrps。
使用这两种方法创建具有将键映射到subGrps数组的新数组。
var keys = ["Subgroup", "0-3", "3-10", "11-40"];
var subGrps = ["SP_20k", "SP_40k", "SP_60k"];
var arrayOfObjects = [];
subGrps.forEach(function(id) {
keys.forEach(function(item) {
if (item === "Subgroup") {
arrayOfObjects.push({
[item]: id
});
} else {
arrayOfObjects.push({
[item]: ""
});
}
});
});
console.log(arrayOfObjects);
预期产出:
[{
"Subgroup" : "SP_20k",
"0-3": "",
"3-10": "",
"11-40": ""
},
{
"Subgroup" : "SP_40k",
"0-3": "",
"3-10": "",
"11-40": ""
},
{
"Subgroup" : "SP_60k",
"0-3": "",
"3-10": "",
"11-40": ""
}]
forEach
是个好选择吗?对keys array
和subGrps array
的对象进行分组以获得该输出。
我错过了什么来获得预期的产出?
有人能帮我吗?
发布于 2020-05-25 04:46:46
可以使用Array.map
对subGrps
数组进行迭代,创建一个对象,将Subgroup
键设置为来自subGrps
的值,并使用Object.assign
为keys
数组中的其他条目添加空值:
var keys = ["Subgroup", "0-3", "3-10", "11-40"];
var subGrps = ["SP_20k", "SP_40k", "SP_60k"];
var arrayOfObjects = subGrps.map(v => Object.assign({
"Subgroup": v
},
...keys.slice(1).map(k => ({
[k]: ""
}))
));
console.log(arrayOfObjects);
这可能会简化为:
var keys = ["Subgroup", "0-3", "3-10", "11-40"];
var subGrps = ["SP_20k", "SP_40k", "SP_60k"];
var arrayOfObjects = subGrps.map(v => Object.assign({},
...keys.map(k => ({
[k]: k == 'Subgroup' ? v : ""
}))
));
console.log(arrayOfObjects);
发布于 2020-05-25 05:03:20
您可以首先创建对象并在循环中添加键。
var keys = ["Subgroup", "0-3", "3-10", "11-40"];
var subGrps = ["SP_20k", "SP_40k", "SP_60k"];
// creates the object with keys once
// you can also use foreach to create this keysObj too.
var keysObj = keys.reduce((resObj, acc) => {
resObj[acc] = ''
return resObj
}, {})
// uses keysObj to generate array of objects
var arrayOfObjects = subGrps.map(subGrp => ({...keysObj, Subgroup: subGrp}))
console.log(arrayOfObjects)
发布于 2020-05-25 04:46:23
尝尝这个,
const arr = [];
subGrps.forEach(subGrp => {
const obj = {}
keys.forEach(key => obj[key] = (key === 'Subgroup') ? subGrp : '' );
arr.push(obj);
})
console.log(arr)
https://stackoverflow.com/questions/61995853
复制相似问题