目標:オブジェクトの配列に、特定のフィールドに特定の値を持つオブジェクトが含まれているかどうかを判別する関数を記述します。そのようなオブジェクトがある場合はオブジェクトを返し、そうでない場合はfalseを返します。
コード
var data = [
{isle: 'VF', item: 'Ginger'},
{isle: 'VF', item: 'Spinach'},
{isle: 'Dairy', item: 'Milk'},
{isle: 'Dairy', item: 'Yogurt'}
];
var objwithPropvalueInarr = function(propname, propvalue, arr){
for(var i=0; i <= arr.length; i++){
if (arr[i][propname] === propvalue) {
// console.log('Found object with value ' + propvalue);
return arr[i];
}
};
return false;
};
上記のコードをGoogleChromeコンソールに入力しました。次の関数の呼び出しは機能します。
objwithPropvalueInarr('isle', 'VF', data)
上記の行はdata[0]
期待どおりに戻ります。
ただし、次の呼び出しはTypeErrorを返します(呼び出しの後に表示されます)
objwithPropvalueInarr('isle', 'nonexistentpropvalue', data)
TypeError: Cannot read property 'isle' of undefined
arguments: Array[2]
get message: function () { [native code] }
get stack: function () { [native code] }
set message: function () { [native code] }
set stack: function () { [native code] }
type: "non_object_property_load"
__proto__: Error
data[0]['isle'] === 'nonexistentpropvalue'
期待どおりに戻りますfalse
。if
関数内の条件がfalse
チェックごとに返されないfalse
場合は、最後に値を返します。誰かがエラーを説明できれば幸いです。
ありがとうございました。