2017-01-03 163 views
-1

如何最簡潔地檢查對象是否包含數組中指定的所有鍵?檢查對象是否包含數組中的所有鍵

例如:如果通過函數返回true數組中的每個項目

var arr = ["foo", "bar"]; 
 

 
var obj = { 
 
    foo: 1, 
 
    bar: "hello" 
 
}; 
 

 
var hasAllKeys = arr.every(function(item){ 
 
    return obj.hasOwnProperty(item); 
 
}); 
 

 
console.log(hasAllKeys);

Array.prototype.every()回報true

var arr = ["foo", "bar"]; 

var obj = { 
    foo: 1, 
    bar: "hello" 
}; 

magic_function(arr, obj); // return true, all keys from array exist 


var obj2 = { 
    foo: 12, 
    bar: "hi", 
    test: "hey" 
}; 

magic_function(arr, obj2); // return true, all keys from array exist, 
          // keys not specified in array don't matter 


var obj3 = { 
    foo: 5 
}; 

magic_function(arr, obj3); // return false, "bar" is missing 
+0

哪裏'magic_function'? – Satpal

+1

@Satpal這就是OP所要求的。 –

+6

又一個代碼服務? –

回答

4

你可以遍歷數組,並檢查重點用in operator

in運算符返回true如果指定的屬性是在指定的對象。

in操作者和Object#hasOwnProperty之間的區別是,in檢查所有屬性,甚至從原型的,如toString(如在實施例)和Object#hasOwnProperty僅檢查自己的屬性,在不脫離原型的屬性。

function checkKeys(keys, object) { 
 
    return keys.every(function (key) { 
 
     return key in object; 
 
    }); 
 
} 
 

 
function checkOwnKeys(keys, object) { 
 
    return keys.every(function (key) { 
 
     return object.hasOwnProperty(key); 
 
    }); 
 
} 
 

 
var arr = ["foo", "bar", "toString"], 
 
    obj = { foo: 1, bar: "hello" }; 
 

 
console.log(checkKeys(arr, obj));    // true 
 
console.log(checkOwnKeys(arr, obj));    // false 
 
console.log(checkOwnKeys(["foo", "bar"], obj)); // true

+0

我認爲在'in'和'hasOwnProperty'之間提及[difference](http://stackoverflow.com/questions/13632999/if-key-in-object-or-ifobject-hasownpropertykey)是有用的。具體來說:_「in運算符爲原型鏈中的屬性返回true」。_仍然是有效的答案。 – Cerbrus

-2

您可以使用此

function magic_func(arr, obj) { 
    var x = true;; 
    for (var i = 0; i < arr.length; i++) { 
     x = obj.hasOwnProperty(arr[i]); 
    } 
    return x; 
} 
+0

此代碼與'return obj.hasOwnProperty(arr [arr.length - 1]);'完全相同。換句話說:它不起作用。 – Cerbrus

相關問題