数组对象必须包含特定的成员/名称

时间:2015-03-16 20:54:17

标签: javascript jquery arrays object

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

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

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

提前致谢。

约翰尼拉

3 个答案:

答案 0 :(得分:3)

您可以使用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; 
});

答案 1 :(得分:2)

你应该真的付出努力(并展示你尝试过的东西以及它为什么不起作用)。

有很多方法可以做你所要求的。这是一个:

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

您可以单独检查每个属性,并抛出一个错误,表明如果需要,会说明缺少哪些属性(或属性)。

答案 2 :(得分:1)

您可以使用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;
}