过滤数组中的重复项

我有一个像这样的数组数组:

[
  [ 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; }


以上是过滤数组中的重复项的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>