识别2D阵列中的部分重复项

时间:2017-10-28 06:29:09

标签: javascript arrays multidimensional-array

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]];

4 个答案:

答案 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);