2015-08-18 2 views
1

Я искал этот вопрос, но ответ был лишним, поэтому я хотел бы спросить, без каких-либо совпадений, как проверить любой массив, содержащий другой массив, или нет.Проверка массива, содержащего массив

Я ожидаю, что это ['abc'] будет ложным, потому что в нем нет другого массива, и это правда ['abc',[1]]. Многие примеры делают сложный цикл, чтобы найти значение массива, но какой самый простой способ узнать, существует ли внутри массива массив?

+3

Итерация, а затем проверить с 'Array.isArray'. – elclanrs

+2

Массивы не обладают магическими полномочиями, чтобы знать, что они содержат (без индексов или накопленного знания того, что в них). Вам просто нужно будет перебирать элементы в массиве и проверять, есть ли в каждом слоте в массиве массив. – jfriend00

+0

@elclanrs почему это не работает? '$ .each (arr, function() { console.log (this.isArray); // undefined });' –

ответ

2

Try используя Array.prototype.some, Array.isArray

var arr1 = ["abc"]; 
 

 
var arr2 = ["abc", [1]]; 
 

 
var res1 = arr1.some(function(item) { 
 
    return Array.isArray(item); 
 
}); 
 

 
var res2 = arr2.some(function(item) { 
 
    return Array.isArray(item); 
 
}); 
 

 
document.body.innerHTML = "arr1 contains `Array`:" + res1 
 
          + "<br> arr2 contains `Array`:" + res2;


$.each(arrayTag,function(){ console.log(this.isArray); }); почему это не работает?

Примечание, jQuery не представляется необходимым возвращать ожидаемые результаты.

Попробуйте добавить параметры $.each() обратного function(key, item) вызова Array.isArray(item) на элемент внутри обратного вызова

var arr1 = ["abc"]; 
 

 
var arr2 = ["abc", [1]]; 
 

 
$.each(arr1, function(key, item) { 
 
    console.log(Array.isArray(item)) 
 
}); 
 

 
$.each(arr2, function(key, item) { 
 
    console.log(Array.isArray(item)) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

$ .each (arrayTag, функция() { console.log (this.isArray); }); 'почему это не работает? –

+0

Почему бы просто не использовать 'return Array.isArray (item)'? – jfriend00

+0

@tonyyew Измените 'this.isArray' на' Array.isArray (this); ' – Tushar

0

В случае, если вы хотите на самом деле захватить внутренний массив:

var array = ['a', [1,2,3]] 

array.filter(function(element){ 
    return Array.isArray(element) 
}) 

но если вы просто хотите boolean

var isAnArray = false 
for(var i = 0; i < array.length; i ++) { 
    if(Array.isArray(array[i])) { 
     isAnArray = true 
     break; 
    } 
} 
+0

действительно ломают то же самое с возвратом false? –

+0

№ break просто собирается остановить цикл, как только вы встретите условие. return также остановит цикл, но также прекратит выполнение всего после цикла. –

2

Вы можете использовать метод jQuery filter() для возврата только элементов массива массива; и чтобы проверить, является ли элемент массивом, вы можете использовать метод jQuery type(). Если числовое число больше 0, то массив содержит массив - true; в противном случае, false.

function hasArray(array) { 
 
    return $.grep(array, function(v,i) { 
 
     return $.type(v) == 'array'; 
 
    }).length > 0; 
 
} 
 

 
console.log(hasArray([ 'abc', [ 1 ] ])); //true 
 
console.log(hasArray([ 'abc' ]));  //false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

Смежные вопросы