var items = [['892','NEW','blue'],
['341','USED','red'],
['892','NEW','yellow'],
['121','USED','blue'],
['735','NEW','red'],
['121','NEW','blue'],
['121','USED','yellow']];
每个项目都有 3 个元素。如果项目的前 2 个元素的确切组合出现在数组中的其他地方,那么我需要输出这两个元素。因此,在这种情况下,所需的输出应该是:
output = [['892','NEW'],
['121','USED]];
功能强大且简单:
var items = [['892','NEW','blue'],
['341','USED','red'],
['892','NEW','yellow'],
['892','NEW','yellow'],
['892','NEW','yellow'],
['121','USED','blue'],
['735','NEW','red'],
['121','NEW','blue'],
['121','USED','yellow']];
var output = [];
var spotted = {};
items.map(function(el){
var string = ''+el[0]+el[1];
if(spotted[string] === 0){
output.push([el[0],el[1]]);
spotted[string] = 1;
}else if(spotted[string] != 1) spotted[string] = 0;
});
console.log(output);
这是我的实现。我创建了一个集合来跟踪我已经看到的元素。如果它存在于该集中,那么我将其添加到另一组副本中。不幸的是,您无法对对象执行相等性检查,因此我首先将元素转换为字符串。我使用Set
作为数据结构,因为它们永远不会重复。
然后,在完成所有操作后,我将集合转换为数组并映射到其上以创建原始数组。
const items = [['892','NEW','blue'],
['341','USED','red'],
['892','NEW','yellow'],
['121','USED','blue'],
['735','NEW','red'],
['121','NEW','blue'],
['121','USED','yellow']]
const duplicates = new Set
const check = new Set
items.forEach(([num, status, color]) => {
let combined = [num, status].join(",")
if (check.has(combined)) {
duplicates.add(combined)
} else {
check.add(combined)
}
})
const duplicatedArr = Array.from(duplicates).map(strArr => strArr.split(","))
console.log(duplicatedArr)
您可以对数组的相同前两个元素使用哈希表并对其进行计数。如果找到正好两个过滤器该元素。在映射完之后,只映射了前两个元素。
var items = [['892', 'NEW', 'blue'], ['341', 'USED', 'red'], ['892', 'NEW', 'yellow'], ['121', 'USED', 'blue'], ['735', 'NEW', 'red'], ['121', 'NEW', 'blue'], ['121', 'USED', 'yellow']],
hash = Object.create(null),
result = items
.filter(function (a) {
var key = a.slice(0, 2).join('|');
hash[key] = (hash[key] || 0) + 1;
return hash[key] === 2;
})
.map(function (a) {
return a.slice(0, 2);
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
var items = [
['892', 'NEW', 'blue'],
['341', 'USED', 'red'],
['892', 'NEW', 'yellow'],
['121', 'USED', 'blue'],
['735', 'NEW', 'red'],
['121', 'NEW', 'blue'],
['121', 'USED', 'yellow']
];
var out = [];
for (i = 0; i < items.length; i++) {
for (j = i + 1; j < items.length; j++) {
if (items[i][0] === items[j][0] && items[i][1] === items[j][1]) {
out.push([items[i][0], items[i][1]]);
}
}
}
console.log(out);