[英]How comparing object item elements in an array with reduce?
我有數組
const example = [{ day: 5, month: 1, key: 1 },{ day: 5, month: 1, key: 2 },{ day: 3, month: 3, key: 3 },{ day: 5, month: 1, key: 4 },{ day: 3, month: 3, key: 5 },{ day: 11, month: 4, key: 6 }];
怎樣檢查元素的天和月的時候是否相同? 如果年份和月份重復我希望結果返回
{err:'the same',index:[0,1,2,3]}
我的代碼不起作用。
const duplicates = Object.entries(array).reduce((acc, item, index) => {
if (acc[1].year === item[1].year && acc[1].month === item[1].month) {
return [
{
index:[acc[0],acc[1]],
err: "the same"
}
];
}
return acc;});
Array#reduce
遍歷數組,得到一個Map
作為key
,它的出現索引作為value
。Array#filter
,獲取具有多個索引的條目。Array#map
返回列表。 const array = [ { day: 5, month: 1, key: 1 }, { day: 5, month: 1, key: 2 }, { day: 3, month: 3, key: 3 }, { day: 5, month: 1, key: 4 }, { day: 3, month: 3, key: 5 }, { day: 11, month: 4, key: 6 } ]; const duplicates = [...array.reduce((map, { day, month }, index) => { const key = `${day}-${month}`; map.set(key, [...(map.get(key) || []), index]); return map; }, new Map).values()].filter(indices => indices.length > 1).map(indices => ({ err: "the same", index: indices })); console.log(duplicates);
我將使用Map
構造函數來構建一個 map 由(唯一的)年月值鍵控,其中關聯的值是錯誤對象的 arrays,初始化為空index
數組。 然后填充這些index
arrays,並獲取具有多個條目的索引。 這不涉及reduce
:
const example = [{ day: 5, month: 1, key: 1 },{ day: 5, month: 1, key: 2 },{ day: 3, month: 3, key: 3 },{ day: 5, month: 1, key: 4 },{ day: 3, month: 3, key: 5 },{ day: 11, month: 4, key: 6 }]; const map = new Map(example.map(o => [o.month * 100 + o.day, {err: "the same", index: []}] )); example.forEach((o, i) => map.get(o.month * 100 + o.day).index.push(i)); const dupes = Array.from(map.values()).filter(o => o.index.length > 1); console.log(dupes);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.