从对象数组中的每个键创建一个数组
Creating an array from each key in an array of objects
我有一个类似于此的数组:对象数组更大,每个对象都有更多属性,不过这就是结构。
let arr = [
{ id: 1, name: "tony", hatColor: "blue" },
{ id: 2, name: "larry", hatColor: "red" },
{ id: 3, name: "stuart", hatColor: "green" },
];
我想为这个数组中的每个键创建一个数组,所以我有一个包含所有 ID 的数组、一个包含所有名称的数组和一个包含所有 hatColors 的数组。
idArr = [1, 2, 3];
nameArr = [tony, larry, stuart];
hatColorArr = [blue, red, green];
我不知道从另一个脚本返回的对象数组到底是什么样子。
我试过的是:
for (var [key, value] of Object.entries(arr)) {
for (var [key, value] of Object.entries(value)) {
var result = arr.map(({ key }) => key);
console.log(result);
}
}
这个returns一个未定义的数组。我希望有办法做到这一点,我不想写很多硬编码的 if push 语句来让它工作。
谢谢。
您可以使用 Array.map
为数组中的每个项目提取 属性 值。
let arr=[{id:1,name:"tony",hatColor:"blue"},{id:2,name:"larry",hatColor:"red"},{id:3,name:"stuart",hatColor:"green"}];
function groupPropValues(objs, prop){
return objs.map(e => e[prop])
}
idArr = groupPropValues(arr, 'id');
nameArr = groupPropValues(arr, 'name');
hatColorArr = groupPropValues(arr, 'hatColor');
console.log(idArr, nameArr, hatColorArr)
如果要自动生成数组,可以通过获取数组中每个对象的属性,然后获取值并将它们存储在对象中来实现。
let arr=[{id:1,name:"tony",hatColor:"blue"},{id:2,name:"larry",hatColor:"red"},{id:3,name:"stuart",hatColor:"green"}];
function groupPropValues(objs, prop) {
return objs.map(e => e[prop])
}
const props = [...new Set(arr.reduce((a,b) => (a.push(Object.keys(b)), a), []).flat())]
const result = props.reduce((a,b) => (a[b] = groupPropValues(arr, b), a), {})
console.log(result)
我有一个类似于此的数组:对象数组更大,每个对象都有更多属性,不过这就是结构。
let arr = [
{ id: 1, name: "tony", hatColor: "blue" },
{ id: 2, name: "larry", hatColor: "red" },
{ id: 3, name: "stuart", hatColor: "green" },
];
我想为这个数组中的每个键创建一个数组,所以我有一个包含所有 ID 的数组、一个包含所有名称的数组和一个包含所有 hatColors 的数组。
idArr = [1, 2, 3];
nameArr = [tony, larry, stuart];
hatColorArr = [blue, red, green];
我不知道从另一个脚本返回的对象数组到底是什么样子。
我试过的是:
for (var [key, value] of Object.entries(arr)) {
for (var [key, value] of Object.entries(value)) {
var result = arr.map(({ key }) => key);
console.log(result);
}
}
这个returns一个未定义的数组。我希望有办法做到这一点,我不想写很多硬编码的 if push 语句来让它工作。
谢谢。
您可以使用 Array.map
为数组中的每个项目提取 属性 值。
let arr=[{id:1,name:"tony",hatColor:"blue"},{id:2,name:"larry",hatColor:"red"},{id:3,name:"stuart",hatColor:"green"}];
function groupPropValues(objs, prop){
return objs.map(e => e[prop])
}
idArr = groupPropValues(arr, 'id');
nameArr = groupPropValues(arr, 'name');
hatColorArr = groupPropValues(arr, 'hatColor');
console.log(idArr, nameArr, hatColorArr)
如果要自动生成数组,可以通过获取数组中每个对象的属性,然后获取值并将它们存储在对象中来实现。
let arr=[{id:1,name:"tony",hatColor:"blue"},{id:2,name:"larry",hatColor:"red"},{id:3,name:"stuart",hatColor:"green"}];
function groupPropValues(objs, prop) {
return objs.map(e => e[prop])
}
const props = [...new Set(arr.reduce((a,b) => (a.push(Object.keys(b)), a), []).flat())]
const result = props.reduce((a,b) => (a[b] = groupPropValues(arr, b), a), {})
console.log(result)