微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

评估Javascript数组

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

[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]]

我想看一个数组是否存在数组,所以如果[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);
                    };
                });

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

解决方法:

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

我怀疑你会从使用诸如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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐