我有一個看起來與此類似的陣列:物件陣列更大,每個物件都有更多屬性,但這就是結構。
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);
}
}
這將回傳一個未定義的陣列。我希望有辦法做到這一點,我不想寫很多硬編碼的 if push 陳述句來讓它作業。
謝謝。
uj5u.com熱心網友回復:
您可以使用它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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/469996.html
標籤:javascript 数组 循环 目的
上一篇:物件參考的奇怪行為,“幽靈”物件
下一篇:使用Maven運行TestNG