繁体   English   中英

识别二维数组中的部分重复项

[英]Identify partial duplicates in 2D 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]];

强大而简单:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM