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

查看数组是否具有数组的最简单方法?Javascript,javascript,arrays,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]我需要首先查看它是否存在,如果它没有将其推送到数组中,如果它没有,则推送到数组中 在将数组推送到元素列表之前,是否有一些真正简单、易

我能想到的唯一方法是做如下事情:

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]

如果您知道数组
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
展平

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

功能可推送(to,val){
if(!to.some)函数(curr){
返回当前长度!==val.length||
curr.some(函数(v,i){return val[i]==v;});
})) {
推(val);
}
}
arr=[[1,2],[0,3]];
maybePush(arr[1,2]);
maybePush(arr[5,6]);

控制台日志(arr)使用下划线可以执行以下操作:

初步做法:

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

    if (i === -1) {
        arr.push(arr_elem);
    }
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);
}
编辑考虑到性能(也请阅读注释),最好使用蛮循环方法检查数组相等性:

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

    if (i === -1) {
        arr.push(arr_elem);
    }
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);
}

我实际上不知道如何实现这一点,所以我只得到了伪代码…所以至少显示了两个输入,以及匹配的输出,以演示您所需的行为。您已经不远了。您需要在第一个数组上循环,然后将内部数组与您的支票进行比较。但不能使用简单的比较运算符来实现这一点。有关如何比较数组的信息,请参阅。我认为有一些简单的lodash方法或下划线方法可以做到这一点??这就是你的复杂程度吗?子数组中的一些数值?
[]concat
创建一个新的不同数组
=
将始终返回false。您是正确的@Oriol,我忘记了对数组进行字符串化。这不符合OP的要求,而且该方法不起作用,因为它无条件地将新数组连接到现有数组的末尾,从而创建一个新数组,不同的数组有更多的成员,因此它的计算结果总是错误的。首先通过将数组转换为字符串来比较数组?@Pluto谢谢,我给出了第一个解决方案,因为它更容易编写,只是在进一步研究后做了一些编辑!