例如,我有以下陣列 -
[
{
name: "abc",
value: "1"
},
{
name: "xyz",
value: "2"
},
{
name: "abc",
value: "3"
},
{
name: "abc",
value: "4"
},
{
name: "xyz",
value: "5"
},
]
value現在,我想通過將相同的物件組合到一個陣列中來將此陣列簡化為一個物件name。像這樣的東西-
{
abc: [1, 3, 4],
xyz: [2, 5]
}
如何reduce在 JavaScript 中使用?
我不確定這是否是正確的方法,但我已經嘗試過類似的方法,但它并沒有給我想要的輸出。
const data = arr.reduce((acc, item) => {
return {
...acc,
[item.name]: [item.value, acc[item.value]]
};
});
uj5u.com熱心網友回復:
const data=[
{
name: "abc",
value: "1"
},
{
name: "xyz",
value: "2"
},
{
name: "abc",
value: "3"
},
{
name: "abc",
value: "4"
},
{
name: "xyz",
value: "5"
},
];
const res=data.reduce((a,c)=>{
(a[c.name]??=[]).push(c.value);
return a;
},{});
console.log(res);
uj5u.com熱心網友回復:
你的答案是正確的,但你需要檢查是否acc已經有一個鍵item.name:
const data = [{
name: "abc",
value: "1"
},
{
name: "xyz",
value: "2"
},
{
name: "abc",
value: "3"
},
{
name: "abc",
value: "4"
},
{
name: "xyz",
value: "5"
},
]
const result = data.reduce((acc, { name, value }) => ({
...acc,
[name] : [...(acc[name] || []), value]
}), {})
console.log(result)
請注意,您可以使用物件解構來簡化累積代碼。
uj5u.com熱心網友回復:
const data = [{
name: "abc",
value: "1"
},
{
name: "xyz",
value: "2"
},
{
name: "abc",
value: "3"
},
{
name: "abc",
value: "4"
},
{
name: "xyz",
value: "5"
},
];
let finalObject = {};
data.forEach((item) => {
if (!finalObject.hasOwnProperty(item.name)) {
finalObject[item.name] = [item.value];
} else {
finalObject[item.name].push(item.value);
}
});
console.log(finalObject);
如果您需要將字串決議為數字,只需決議值,它會給您答案
{
abc: [1, 3, 4],
xyz: [2, 5]
}
uj5u.com熱心網友回復:
您可以使用Array.prototype.reduce對陣列進行分組。
const
data = [
{ name: "abc", value: "1" },
{ name: "xyz", value: "2" },
{ name: "abc", value: "3" },
{ name: "abc", value: "4" },
{ name: "xyz", value: "5" },
],
result = data.reduce((r, o) => ((r[o.name] ??= []).push(o.value), r), {});
console.log(result);
reduce需要一些時間來適應,但一旦點擊它就相當簡單。您還可以使用簡單的for...of回圈對陣列進行分組。
const data = [
{ name: "abc", value: "1" },
{ name: "xyz", value: "2" },
{ name: "abc", value: "3" },
{ name: "abc", value: "4" },
{ name: "xyz", value: "5" },
];
const result = {};
for (let d of data) {
(result[d.name] ??= []).push(d.value);
}
console.log(result);
其他相關檔案:
- Array.prototype.push
- 對于...的
- 空值合并運算子 (??)
- 逗號運算子 (,)
uj5u.com熱心網友回復:
使用reduce():
const arr = [
{
name: "abc",
value: "1"
},
{
name: "xyz",
value: "2"
},
{
name: "abc",
value: "3"
},
{
name: "abc",
value: "4"
},
{
name: "xyz",
value: "5"
},
]
const data = arr.reduce((a,c) => ({...a, [c.name]: a[c.name] ? [...a[c.name], c.value] : [c.value]}),{})
console.log(data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481252.html
標籤:javascript 数组 减少
上一篇:為什么GoogleSheetsAppScript中的“setFontWeights(Array)”函式等批量操作不起作用?
