2017-10-04 59 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属性。

相关问题