查看数组是否具有数组的最简单方法?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谢谢,我给出了第一个解决方案,因为它更容易编写,只是在进一步研究后做了一些编辑!