评估Javascript数组

Ste*_*McD 3 javascript arrays extjs

我有一个数组包含一个数组数组,如果这是有道理的.例如:

[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)

我想看一个数组是否存在数组,所以如果[1,2,3]完全重复.我曾尝试使用.indexOf方法,但确实找到了副本.我也尝试过Extjs手动遍历数组并评估每个内部数组,这就是我做的方法:

var arrayToSearch = [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]];        
var newArray = [1, 2, 3];
Ext.each(arrayToSearch, function(entry, index){
                    console.log(newArray, entry);
                    if(newArray == entry){
                        console.log(index);
                    };
                });
Run Code Online (Sandbox Code Playgroud)

这也没有检测到重复.console.log将输出[1,2,3]和[1,2,3]但不会将它们识别为相等.我也尝试了===评估器,但显然因为==不起作用===不会工作.我在斗智斗勇,有任何建议.

nto*_*end 10

使用=====不使用两个数组进行比较,因为它们不是同一个对象.如果要确定两个数组的元素相等,则需要逐个元素地比较数组.

我怀疑你会从使用类似技巧join(',')然后使用字符串操作中获得任何收益.以下应该工作:

function arraysAreEqual (a, b) {
  if (a.length != b.length) {
    return false;
  }

  for (var i=0; i<a.length; i++) {
    if (a[i] != b[i]) {
      return false;
    }
  }

  return true;
}

function containsArray (arrays, target) {
  for (var i=0; i<arrays.length; i++) {
    if (arraysAreEqual(arrays[i], target)) {
      return true;
    }
  }

  return false;
}

var arraysToSearch = [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]];
var newArray = [1, 2, 3];
containsArray(arraysToSearch, newArray);
Run Code Online (Sandbox Code Playgroud)

  • +1用于提供代码.当然,这假设数组不包含任何无法通过`=='(例如其他数组)进行比较的内容.但OP的样本数据没有任何这些,所以...... (2认同)