繁体   English   中英

比较2D阵列 - 寻找独特的项目

[英]Comparing 2D-arrays - finding unique items

我有2个数组,需要识别array2中没有出现在array1中的项。

在检查唯一性时,只应比较第1,第2和第4个元素,第3个元素(库存量)应排除在比较之外。

var array1 = [['892','NEW','2','blue'],
     ['675','USED','2','white'],
     ['943','NEW','2','green'],
     ['121','USED','2','yellow']];

var array2 = [['892','NEW','1','blue'],
     ['892','NEW','1','yellow'],
     ['121','USED','1','blue'],
     ['121','NEW','1','blue'],
     ['121','USED','1','yellow']];

结果应该是:

 result = [
     ['892','NEW','1','yellow'],
     ['121','USED','1','blue'],
     ['121','NEW','1','blue']];

我已经尝试重新处理针对类似问题发布的几个解决方案,但是却无法针对这种特定情况进行解决。

您可以通过检查哈希表来获取哈希表和从给定数组生成密钥的函数,并过滤array2

 function getKey(array) { return [0, 1, 3] .map(function (i) { return array[i]; }) .join('|'); } var array1 = [['892', 'NEW', '2', 'blue'], ['675', 'USED', '2', 'white'], ['943', 'NEW', '2', 'green'], ['121', 'USED', '2', 'yellow']], array2 = [['892', 'NEW', '1', 'blue'], ['892', 'NEW', '1', 'yellow'], ['121', 'USED', '1', 'blue'], ['121', 'NEW', '1', 'blue'], ['121', 'USED', '1', 'yellow']], hash = Object.create(null), result = []; array1.forEach(function (a) { hash[getKey(a)] = true; }); result = array2.filter(function (a) { return !hash[getKey(a)]; }); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

在js中它会像(更改为更短的代码):

array2.filter(function(val){
  return !array1.some(function(item){
    return (val[0] == item[0] && val[1] == item[1] && val[3] == item[3]);
  })
});

唯一的解决方案是将数组的每个元素与另一个数组的每个元素进行比较。 当你找到相同的东西时,你会退出循环并返回true。 如果没有找到任何内容,只返回false并将元素添加到输出数组中。 我希望这有帮助。

试试这个...你要跳过的索引只需在代码下面的index []中给它

foreach(a中的var numberA){foreach(b中的var numberB){if(numberA == numberB){if(a.inex [3]){} else lblDate.Text + = numberA.ToString(); }}}

暂无
暂无

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

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