2017-10-04 79 views
0

我不介意這是在測試可能不存在的屬性時避免錯誤的正確方法,但它非常笨重,而且無論如何都不能正確地完成這項工作!如果相關的'name'在數組中,那麼返回'num'的更好方法是什麼?正確的方法來避免空屬性的錯誤

var myArray = []; 
myArray.push ({'name': 'ann', 'num':5}); 
myArray.push ({'name': 'bob', 'num':6}); 

var num = (myArray.map(function(s) { return s.name }).indexOf('charles')) ? myArray[myArray.map(function(s) { return s.name }).indexOf('charles')].num : 0; 

console.log(num); 
+0

您應該檢查myArray.map(function(s){return s.name})。indexOf('charles'))!== -1,indexOf返回-1作爲真 –

+0

運行映射兩次實際上效率低下。 – epascarello

+0

是否有重複的名字?例如,會是第5號和第10號? – Matt

回答

0

您可以使用.find()

var obj = myArray.find(function(entry) { return entry.name === "charles"; }); 
return obj ? obj.num : undefined; 

.find()函數有一個斷言函數作爲它的參數和返回成功測試數組中的第一項。此代碼將檢查.find()是否返回其中一個數組條目,並在找到條目時返回.num屬性。

相關問題