我目前正在從事一個專案,其中我有一個物件陣列,每個物件都有“屬性”和“變體”。
我需要將它們分組為每個具有“屬性”和“變體”串列的屬性的物件。
樣本輸入:
[
{
"attribute": "Pack",
"variation": "full"
},
{
"attribute": "Size",
"variation": "M"
},
{
"attribute": "Color",
"variation": "blue"
},
{
"attribute": "Size",
"variation": "X"
},
{
"attribute": "Color",
"variation": "red"
},
{
"attribute": "Pack",
"variation": "half"
}
]
預期輸出:
[
{
"attribute": "Pack",
"variations": ["full", "half" ]
},
{
"attribute": "Size",
"variations": ["M", "X"]
},
{
"attribute": "Color",
"variations": ["blue", "red"]
},
]
uj5u.com熱心網友回復:
- 使用
Array#reduce,迭代陣列,同時更新物件累加器,其中屬性是key,對應的物件(屬性和變體)是value。在每次迭代中,為了更新變體,您需要檢查串列中是否已經存在當前屬性的記錄acc(variations您可以使用optional-chaining)并設定空陣列的默認值(您可以使用nullish-coalescing-operator) - 使用
Object#values,回傳分組物件的串列,每個物件都有屬性和變體
const arr = [ { "attribute": "Pack", "variation": "full" }, { "attribute": "Size", "variation": "M" }, { "attribute": "Color", "variation": "blue" }, { "attribute": "Size", "variation": "X" }, { "attribute": "Color", "variation": "red" }, { "attribute": "Pack", "variation": "half" } ];
const res = Object.values(
arr.reduce((acc, { attribute, variation }) => ({
...acc,
[attribute]: {
attribute,
variations: [...(acc[attribute]?.variations ?? []), variation]
}
}), {})
);
console.log(res);
uj5u.com熱心網友回復:
你可以試試這個:
let inputObjs = [
{
"attribute": "Pack",
"variation": "full"
},
{
"attribute": "Size",
"variation": "M"
},
{
"attribute": "Color",
"variation": "blue"
},
{
"attribute": "Size",
"variation": "X"
},
{
"attribute": "Color",
"variation": "red"
},
{
"attribute": "Pack",
"variation": "half"
}
];
let grouped = [];
let attributeIndex = {};
let groupedIndex = 0;
for(k = 0; k < inputObjs.length;k ){
const obj = inputObjs[k];
const attrKey = `_${obj.attribute}`;
if(typeof attributeIndex[attrKey] != 'undefined'){
//console.log(grouped[attributeIndex[attrKey]].variations,grouped[attributeIndex[attrKey]].variations.indexOf(obj.variation),obj.variation);
if(grouped[attributeIndex[attrKey]].variations.indexOf(obj.variation) == -1){
grouped[attributeIndex[attrKey]].variations.push(obj.variation);
}
}else{
attributeIndex[attrKey] = groupedIndex;
grouped[attributeIndex[attrKey]] = {attribute:obj.attribute,variations:[]};
grouped[attributeIndex[attrKey]].variations.push(obj.variation);
groupedIndex = 1;
}
//console.log(obj);
}
console.log(grouped);
//console.log(attributeIndex);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/418756.html
標籤:
