如何检查特定数组是否存在于数组数组中,纯粹按其值进行比较?

时间:2016-03-31 14:17:53

标签: javascript jquery arrays

var a = [["attribute1", "param1", 1], ["attribute2", "param2", 2], ["attribute3", "param3", 3]];

var b = ["attribute1", "param1", 1];

如何在javascript中检查数组“a”中是否存在数组“b”,只比较里面的值?

我尝试过暴力方法,我问这是否可以使用jQuery或underscore.js以有效的方式完成?提前感谢您的帮助。

3 个答案:

答案 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)

查看我为你制作的小提琴:

JSFiddle - compare two arrays

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;