转换数组的对象映射字段值结构javascript



我有一个像这样的对象数组:

const arr=[
{ name:"test",
class:3
},
{ name:"test2",
class:4
},
{ name:"test3",
class:5
},]

现在我必须将其转换为如下所示的map结构:

const map={
"name":["test","test2","test3"],
"class":[3,4,5]
}

我对如何制作这种结构一窍不通。如有任何线索,我们将不胜感激。

如果您有任意数量的键,您可以使用Object.entries()获取所有键值对。然后循环遍历所有条目并将它们添加到最终输出中。

const arr=[{name:"test",class:3},{name:"test2",class:4},{name:"test3",class:5}];
const map = arr.reduce((acc, obj) => {
for(const [key, value] of Object.entries(obj)) {
if(acc[key]) {
acc[key].push(value);
}else{
acc[key] = [value];
}
}

return acc;
}, {});
console.log(map);

有一个函数接受数组和你正在寻找的属性,并使用map为你的新对象的每个属性返回一个新的数据数组。

const arr=[{name:"test",class:3},{name:"test2",class:4},{name:"test3",class:5}];
function getData(arr, prop) {
return arr.map(obj => obj[prop]);
}
const map = {
name: getData(arr, 'name'),
class: getData(arr, 'class')
}
console.log(map);

应该是这样的

arr.reduce((res, obj) => {
Object.entries(obj).forEach(([k,v]) =>     {
if(!res[k]) res[k] = []
res[k].push(v)
})
return res
},{})

最新更新