2017-01-03 10 views
-1

Wie kann ich kurz und bündig überprüfen, ob ein Objekt ALLE in einem Array angegebenen Schlüssel enthält?Überprüfen, ob das Objekt alle Schlüssel im Array enthält

Zum Beispiel:

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

Wo verwenden Sie die 'magic_function' ist? – Satpal

+1

@Satpal Das fragt OP. –

+6

Noch ein Code-Service? –

Antwort

7

Dies sollte es tun:

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() kehrt true wenn die übergebene Funktion true für jedes Element im Array zurückgibt.
Object.prototype.hasOwnProperty() ist ziemlich selbsterklärend.

+1

Gott! Du bist so schnell und gut darin! Ich habe nicht erwartet. –

4

Sie könnten das Array iterieren und prüfen Sie den Schlüssel mit in operator

Der in Operator gibt true wenn die angegebene Eigenschaft in dem angegebenen Objekt ist.

Der Unterschied zwischen in Operator und Object#hasOwnProperty ist, in prüfen alle Eigenschaften, auch die, die vom Prototyp, wie toString (wie im Beispiel) und Object#hasOwnProperty prüfen nur eigene Eigenschaften, ohne dass die Eigenschaften von den Prototypen.

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

Ich denke, es wäre nützlich, die [Unterschied] (http://stackoverflow.com/questions/13632999/if-key-in-object-or-ifobject-hasownpropertykey) zwischen 'in' und' hasOwnProperty' zu erwähnen. Insbesondere: _ "Der Operator in gibt für Eigenschaften in der Prototypkette den Wert true zurück." _ Noch gültige Antwort. – Cerbrus

-2

können Sie diese

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

Dieser Code tut dasselbe wie 'return obj.hasOwnProperty (arr [arr.length - 1]);'. Mit anderen Worten: Es funktioniert nicht. – Cerbrus

Verwandte Themen