【发布时间】:2019-01-27 01:18:15
【问题描述】:
我目前有一个数组数组,其中包含所有具有相同序列号的部件。我想要做的是只过滤掉具有相同序列号和相同部件号的部件。我目前能够获得所有唯一零件编号的列表,但我一生都无法弄清楚如何仅取出具有相同零件编号和相同序列号的物品。数组是按序号排序的,所以
dupes = [
[{ sn: 001, partNum: 2505}]
[{ sn: 001, partNum: 9999}]
[{ sn: 001, partNum: 9999}],
[{ sn: 002, partNum: 1234}]
[{ sn: 002, partNum: 1234}],
[{ sn: 003, partNum: 555}]
[{ sn: 003, partNum: 8675}]]
我想要得到的是一个只包含重复项的数组
[{ sn: 001, partNum: 9999}]
[{ sn: 001, partNum: 9999}],
[{ sn: 002, partNum: 1234}]
[{ sn: 002, partNum: 1234}]
我整天都在努力解决这个问题,但没有找到不使用突变的好解决方案。如果零件号出现两次,有没有办法过滤掉“SN”?我还必须检查每个零件号,因为在少数情况下,我看到两个不同的零件号每次使用相同的序列号两次,如果这样的话。 任何帮助都会很棒......严重卡在这里。
编辑:
我最终以不同的方式完成了这项任务。不过,我确实找到了一个很好的函数,可以让您计算数组中某个项目的所有出现次数。
function count(arr) {
return arr.reduce((prev, curr) => (prev[curr] = ++prev[curr] || 1, prev), {})
}
【问题讨论】:
-
你能举例说明你的预期输出吗?
-
所以结果应该是 [{ sn: 001, partNum: 9999}] 和 [{ sn: 002, partNum: 1234}] ?
-
@JohnEllmore 我更新了我的代码以显示我想要实现的理想目标。
-
你在寻找一个普通的 JS 解决方案吗?还是您愿意使用 Lodash 之类的库?
-
@JohnEllmore 我试图让一切都保持原样。
标签: javascript arrays sorting functional-programming