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个元素的确切组合出现在数组的其他位置,那么我需要输出这2个元素。所以在这种情况下,所需的输出应该是:
output = [['892','NEW'],
['121','USED]];
答案 0 :(得分:1)
功能强大且简单:
VALUES

答案 1 :(得分:1)
这是我的实施。我创建了一个集合来跟踪我已经看过的元素。如果它存在于该集合中,那么我将其添加到另一组重复项中。不幸的是,您无法对对象执行相等性检查,因此我首先将元素转换为字符串。我使用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)

答案 2 :(得分:1)
您可以对数组的前两个元素使用哈希表并对其进行计数。如果找到恰好两个过滤那个元素。在填充地图之后只需要前两个元素。
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; }
答案 3 :(得分: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);