我已經創建了一個例子來讓你理解這個問題。
let arr = [];
arr.push({
module_id: 41,
name: 'first'
}, {
module_id: 41,
name: 'second',
important: true,
}, {
module_id: 43,
name: 'third'
});
const lookup = arr.reduce((a, e) => {
a[e.module_id] = a[e.module_id] || 0;
return a;
}, {});
console.log('lookup is', lookup);
let unique = [];
arr.filter((e) => {
if (lookup[e.module_id] === 0) {
unique.push(e)
}
})
console.log('unique', unique)
首先,我有一個空陣列arr,我在其中推送 3 個物件。
請注意,module_name. 有兩個重復,我想使用第二個和屬性 name important。
我在reduce這里使用以找出基于module_name. 它將回傳 1,鍵為 41,鍵為 0 為 43。我想同時使用兩者,但我不想復制到我的unique陣列中。目前,我只會推送那些獨特的元素,在我們的例子中module_id: 43。
現在我怎樣才能得到重復的值(帶important屬性)?
uj5u.com熱心網友回復:
let arr = [];
arr.push(
{
module_id: 41,
name: 'first',
},
{
module_id: 41,
name: 'second',
important: true,
},
{
module_id: 43,
name: 'third',
}
);
const result = arr.reduce(
(acc, curr) =>
acc.find((v) => v.module_id === curr.module_id) ? acc : [...acc, curr],
[]
);
console.log(result);
uj5u.com熱心網友回復:
您可以使用 aMap并僅獲得不同的第一個值或具有重要標志的值。
const
array = [{ module_id: 41, name: 'first' }, { module_id: 41, name: 'second', important: true }, { module_id: 43, name: 'third' }],
result = Array.from(array
.reduce(
(m, o) => m.set(o.module_id, !o.important && m.get(o.module_id) || o),
new Map
)
.values()
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
嘗試
let unique = [];
arr.filter((e) => {
if (lookup[e.module_id] === 0) {
unique.push(e)
}
else if (e.important) {
unique.push(e)
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/388521.html
標籤:javascript 数组 反应 目的
