我有一个包含三列的数组:
[ '27', 'Name', '1' ],
[ '27', 'Name', '1' ],
[ '27', 'Name', '1' ],
[ '27', 'Name', '2' ]
我正在尝试删除第三列中有重复项的项目,以便获得:
[ '27', 'Name', '2' ]
我正在使用以下代码:
function getUniqueListBy(arr, key) {
return [...new Map(arr.map(item => [item[key], item])).values()]
}
let newArray = getUniqueListBy(myArr, '2');
它在删除重复项方面做得非常好,但我也希望删除该项(已复制的项)。如果可能的话,我希望代码尽可能高效。我该怎么做?
2条答案
按热度按时间vom3gejh1#
Map:您可以在索引处创建元素的Map
2
并将值存储为index
在该索引处包含相同值的。它是一个元素字典,同时包含相同的元素
2
指数过滤器:过滤结果并在字典中查找位于
2
索引的数组长度应为1
```const arr = [
["27", "Name", "1"],
["27", "Name", "1"],
["27", "Name", "1"],
["27", "Name", "2"],
];
// [ '27', 'Name', '2' ]
const map = new Map();
// na is nestedArray
arr.forEach((na, i) => {
const value = na[2];
if (map.has(value)) map.get(value).push(i);
else map.set(value, [i]);
});
const result = arr.filter((na, i) => map.get(na[2]).length === 1);
console.log(result);
vojdkbi02#
如果您将子阵列串接(这便于与
===
及Set#has
),您可以使用两个集合轻松识别哪些项是重复项,以便将其删除。