2017-10-04 6 views
0

これは存在しないかもしれないプロパティをテストするときにエラーを回避する正しい方法だと思いましたが、それは非常にぎこちなく、とにかくうまく機能しません。関連する「名前」が配列内にある場合、「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

indexOf( 'charles'))!== -1 indexOfがtrueを返します。 –

+0

地図を2回実行するのは本当に効率が悪いです。 – epascarello

+0

名前が重複していますか?例えば、アンは5番と10番になりますか? – Matt

答えて

0

あなたは.find()を使用することができます。

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

.find()関数は、引数として述語関数を取り、テストを成功し、配列の最初のエントリを返します。このコードは、.find()が配列エントリの1つを返すかどうかをチェックし、エントリが見つかった場合は.numプロパティを返します。

関連する問題