我能想到的唯一方法就是做:
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]];
答案 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);
}