查看数组是否有数组的最简单方法?使用Javascript

时间:2015-11-05 20:26:36

标签: javascript arrays

我能想到的唯一方法就是做:

for current array length,
  for array to check length
   if current array i === array to check i
      true

基本上我有以下内容:

arr = [[1,2], [0,3]];

当我想向这个数组中添加另一个数组时:[1,2]我需要首​​先查看它是否存在,是否它不会将其推送到数组,如果它没有推送它

在将数组推送到元素列表之前,是否有一些非常简单,干净的可读方法来检查数组是否存在数组?

更新

它应该很简单,你有数组:

arr = [[1,2], [0,3]];

你试着推动:

[1,2]

什么都没发生。

您尝试推送:[4,6]。新阵列:[[1,2], [0,3], [4,6]];

3 个答案:

答案 0 :(得分:3)

由于复杂性有限,因此存在一个简单的解决方案:

function maybePush(to, val) {
  if(!to.some(function(curr) {
      return curr.length !== val.length ||
        curr.some(function(v, i) { return val[i] === v; });
    })) {
     to.push(val);
  }
}


arr = [[1,2], [0,3]];
maybePush(arr, [1,2]);
maybePush(arr, [5,6]);
console.log(arr);

你可能想要添加一些防护,检查你期望的阵列是否真的是一个阵列等等(为了清楚起见,请注明)......

这个想法很简单,使用迭代比较检查外部数组的任何值是否等于val数组。

答案 1 :(得分:1)

如果您知道数组arr仅包含整数和数组,则只需检查数组是否与展平数组匹配,就会指示该数组是否包含内部数组。

var arr = [1,2,3,[4,5],6];

if (JSON.stringify(arr) === JSON.stringify([].concat.apply([], arr))) {
  // Does not contain an array
}

代码段[].concat.apply([], arr)展平了数组arr

答案 2 :(得分:0)

使用下划线可以执行此操作:

初步方法:

    var i = _.findIndex(arr, function (e) {
         return (e.join(',') === arr_elem.join(','));
    });

    if (i === -1) {
        arr.push(arr_elem);
    }

编辑考虑到性能(另请阅读评论here),最好使用粗暴循环方法检查数组相等性:

function arraysEqual(arr1, arr2) {
    if(arr1.length !== arr2.length)
        return false;
    for(var i = arr1.length; i--;) {
        if(arr1[i] !== arr2[i])
            return false;
    }

    return true;
}

var i = _.findIndex(arr, function (e) {
     return arraysEqual(arr_elem, e);
});

if (i === -1) {
    arr.push(arr_elem);
}