目标:编写一个函数,确定对象数组是否包含具有给定字段的给定值的对象。如果存在这样的对象,则返回该对象,否则返回 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;
};
我在 Google Chrome 控制台中输入了上述代码。以下对该函数的调用有效:
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
在最后返回值。如果有人可以解释错误,将不胜感激。
谢谢你。