2017-10-10 171 views
3

我想檢查數組是否包含對象。我不想比較值,只是想檢查我的數組中是否存在對象?如何檢查數組是否至少包含一個對象?

Ex。

$arr = ['a','b','c'] // normal 
$arr = [{ id: 1}, {id: 2}] // array of objects 
$arr = [{id: 1}, {id:2}, 'a', 'b'] // mix values 

所以,我怎樣才能檢查,如果數組包含對象

+0

將它永遠是ID?或者它可以改變? – shv22

+0

循環訪問數組項並測試它是否是對象https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript –

+0

你在尋找一個特定的值,或者只是如果數組包含「任何對象」? – Cerbrus

回答

5

您可以使用some方法,該方法測試array中是否至少有一個元素通過了由實現的test提供的函數。

let arr = [{id: 1}, {id:2}, 'a', 'b']; 
 
let exists = arr.some(a => typeof a == 'object'); 
 
console.log(exists);

+0

謝謝@ Alexandru-Ionut Mihai。你的答案是完美的。你能告訴我這是如何工作的嗎? – parth

+0

@parth,'some'方法爲數組中的任何項目提供回調測試函數。 'test'函數檢查數組項是否是對象。如果'typeof a'是object,'condition'就是如果'typeof a'是object.'some'方法返回true,如果從數組中至少有一個條目滿足條件。 –

+0

明白了。謝謝。 – parth

4

我要檢查,如果數組包含對象或不

使用some簡單地檢查陣列中的任何項目都有類型「對象」的值

var hasObject = $arr.some(function(val){ 
    return typeof val == "object"; 
}); 
0

你可以指望的對象和使用它的三種類型的返回之一。

function getType(array) { 
 
    var count = array.reduce(function (r, a) { 
 
     return r + (typeof a === 'object'); 
 
    }, 0); 
 
    
 
    return count === array.length 
 
     ? 'array of objects' 
 
     : count 
 
      ? 'mix values' 
 
      : 'normal'; 
 
} 
 

 
console.log([ 
 
    ['a', 'b', 'c'], 
 
    [{ id: 1 }, { id: 2 }], 
 
    [{ id: 1 }, { id: 2 }, 'a', 'b'] 
 
].map(getType));

0

var hasObject = function(arr) { 
 
    for (var i=0; i<arr.length; i++) { 
 
    if (typeof arr[i] == 'object') { 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
}; 
 

 
console.log(hasObject(['a','b','c'])); 
 
console.log(hasObject([{ id: 1}, {id: 2}])); 
 
console.log(hasObject([{id: 1}, {id:2}, 'a', 'b']));

相關問題