过滤数组中的重复项
我有一个像这样的数组数组:
[
[ 48, 28 ], [ 36, 19 ],
[ 54, 12 ], [ 24, 12 ],
[ 30, 12 ], [ 42, 12 ],
[ 40, 10 ], [ 48, 4 ],
[ 12, 4 ], [ 18, 3 ],
[ 20, 2 ], [ 36, 1 ]
]
我想根据每个项目的第一个值过滤重复项:item[0]。例如,对于上面的数组,我想从中删除[48, 4]and [36, 1],因为它已经包含[48, 28]and [36, 19]。预先感谢您的帮助。
回答
迭代datausing ,.reduce同时Map将第一个数字的akey和项目 as value。在每次迭代中,如果地图没有第一个数字作为键,则添加记录。最后,values这张地图的 将是您的预期结果:
const data = [
[ 48, 28 ], [ 36, 19 ],
[ 54, 12 ], [ 24, 12 ],
[ 30, 12 ], [ 42, 12 ],
[ 40, 10 ], [ 48, 4 ],
[ 12, 4 ], [ 18, 3 ],
[ 20, 2 ], [ 36, 1 ]
];
const res = [...data.reduce((acc, arr) => {
const [first] = arr;
if(first && !acc.has(first)) acc.set(first, arr);
return acc;
}, new Map).values()];
console.log(res);
回答
您可以对 a 进行闭包Set并通过查看嵌套数组的第一项来过滤数组。
const
data = [[48, 28], [36, 19], [54, 12], [24, 12], [30, 12], [42, 12], [40, 10], [48, 4], [12, 4], [18, 3], [20, 2], [36, 1]],
result = data.filter((s => ([v]) => !s.has(v) && s.add(v))(new Set));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }