数组对象必须包含特定的 members/names

An object of array must contain specific members/names

我如何验证作为参数传递给我的 jQuery 插件的数组对象以确保它包含特定的 members/names?

例如,我想验证下面这个对象是否有 'name'、'ID' 和 'Location' 这三个成员,在这种情况下应该是真的。

var arr = [{
    name: 'Johny',
    ID: 1,
    Location: 'USA'
}, {
    name: 'Mike',
    ID: 4,
    Location: 'CAN'
}];

提前致谢。

强尼

你真的应该努力(并展示你已经尝试过的方法以及为什么它不起作用)。

有多种方法可以满足您的要求。这是一个:

arr.forEach(function(object) {
  if (!object.name || !object.ID || !object.Location) {
    throw Error("Missing properties");
  }
});

您可以单独检查每个 属性 并抛出一个错误,指出缺少 属性(或属性),如果需要的话。

您可以使用Array.prototype.every方法来测试数组中的每个对象是否符合必要的键规则:

var valid = arr.every(function(obj) {
    var keys = Object.keys(obj);
    return keys.length === 3 && 'name' in obj && 'ID' in obj && 'Location' in obj; 
});

您可以使用 Object.hasOwnProperty() 检查每个 属性 是否存在,如下所示:

function isValid(arr){
    // If arr is an array
    if( arr && arr.constructor === Array){
        // For each item
        for(var i=0, l=arr.length; i<l; i++){
            var item = arr[i];
            if(   !typeof item !== 'object'
               || !item.hasOwnProperty('name')
               || !item.hasOwnProperty('ID')
               || !item.hasOwnProperty('Location')
               // This is to check if it has *exactly* those 3 properties and no more
               || Object.keys(arr).length != 3){
                return false;
            }
        }
        return true;
    }
    return false;
}