Javascript 比较二维阵列-查找唯一项
我有2个数组,需要标识array2中未出现在array1中的项 在检查唯一性时,仅应比较第一、第二和第四个元素,第三个元素(库存量)应排除在比较之外Javascript 比较二维阵列-查找唯一项,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有2个数组,需要标识array2中未出现在array1中的项 在检查唯一性时,仅应比较第一、第二和第四个元素,第三个元素(库存量)应排除在比较之外 var array1 = [['892','NEW','2','blue'], ['675','USED','2','white'], ['943','NEW','2','green'], ['121','USED','2','yellow']]; var array2 = [['892','NEW','1','bl
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']];
我尝试过修改一些针对类似问题的解决方案,但无法针对这种特定情况解决。在js中,它类似于(更改为较短的代码):
唯一的解决方案是将一个数组的每个元素与另一个数组的每个元素进行比较。当您发现某个值相等时,您将以返回true的方式跳出循环。如果没有找到任何内容,只需返回false并将元素添加到输出数组中。我希望这有帮助。您可以获取一个哈希表和一个函数,该函数从给定数组中生成一个键,并通过检查哈希表过滤
array2
函数getKey(数组){
返回[0,1,3]
.map(函数(i){返回数组[i];})
.加入(“|”);
}
变量数组1=['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),
结果=[];
数组1.forEach(函数(a){
hash[getKey(a)]=true;
});
结果=阵列2.过滤器(函数(a){
return!hash[getKey(a)];
});
控制台日志(结果)代码>
.as控制台包装{max height:100%!重要;top:0;}
试试这个。。。无论您想跳过什么索引,只需在代码下面的索引[]中给出即可
foreach(a中的变量编号)
{
foreach(b中的变量编号b)
{
如果(numberA==numberB)
{
if(a.inex[3]){}else
lblDate.Text+=numberA.ToString();
}
}
}可以将其简化为:array2.filter(函数(val){array1.forEach(函数(item){return val[0]==item[0]&&val[1]==item[1]&&val[3]==item[3];};}),除了它不工作之外,这些都是嵌套函数man.)另外,编辑了代码,因为op想要的是完全相反的版本。@vicbyte我已经接受了Nina的答案,我也喜欢你的方法,它更容易理解。我同意她的方法更适合大集合,因为它会更快。我也想到了哈希表,但那时她已经发布了回复,所以…:)
array2.filter(function(val){
return !array1.some(function(item){
return (val[0] == item[0] && val[1] == item[1] && val[3] == item[3]);
})
});