比较2D阵列 - 查找唯一项目

时间:2017-10-29 09:47:41

标签: javascript arrays multidimensional-array

我有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']];

我已尝试重复处理针对类似问题发布的多个解决方案但未能针对此特定情况进行解决。

4 个答案:

答案 0 :(得分:2)

您可以使用哈希表和一个从给定数组中生成密钥的函数,并通过检查哈希表来过滤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; }

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试试这个...你要跳过的索引只需在代码

下面的索引[]中给它

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