var a = [["attribute1", "param1", 1], ["attribute2", "param2", 2], ["attribute3", "param3", 3]];
var b = ["attribute1", "param1", 1];
如何在javascript中检查数组“a”中是否存在数组“b”,只比较里面的值?
我尝试过暴力方法,我问这是否可以使用jQuery或underscore.js以有效的方式完成?提前感谢您的帮助。
答案 0 :(得分:2)
粗略而慢的方法可能是
var isPresent = a.filter(function(val){ return val.join("===") == b.join("==="); }).length > 0 ;
或
var isPresent = a.filter(function(val){ return JSON.stringify(val) == JSON.stringify(b); }).length > 0 ;
更快的方式可能是
var isPresent = a.filter(function(val){
return val[0] == b[0] && val[1] == b[1] && val[2] == b[2] ;
}).length > 0 ;
如果a和b中的项目数量多于/少于3,那么
var isPresent = a.filter(function(val){
return val.filter( function(item, index){
return val[index] == b[index]
} ).length > 0;
}).length > 0;
答案 1 :(得分:1)
function check_if_array_exists_in_array(a, b) {
for(int i = 0; i < a.length; i++) {
var arr = a[i];
if(arr.length == b.length) {
for(int j = 0; j < arr.length; j++) {
if(arr[j] !== b[j]) {
break;
}
}
return true;
} else {
break;
}
}
return false;
}
答案 2 :(得分:1)
查看我为你制作的小提琴:
var a = [["attribute1", "param1", 1], ["attribute2", "param2", 2], ["attribute3", "param3", 3]];
var b = ["attribute1", "param1", 1];
var str = "",
counter = 0;
//traverse through multidimensional array
for (var i = 0; i < a.length; i++) {
//cancel the nested loop if a result was found
if (str === 'exist') {break;}
//process length-matching arrays only
if (a[i].length === b.length) {
//loop through both array's values
for (var x = 0; x < a[i].length; x++) {
if (a[i][x] == b[x]) {
//value match
counter++;
if (counter == b.length) {
//equal arrays
str = 'exist';
break;
}
} else {
//value mismatch
counter = 0;
str = 'not existing';
break;
}
}
} else {str = 'not existing';}
}
document.getElementById('fb').innerHTML = str;