2017-01-03 4 views
-1

オブジェクトに配列で指定されたすべてのキーが含まれているかどうか簡単に確認するにはどうすればよいですか?例えばオブジェクトに配列内のすべてのキーが含まれていることを確認します

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

使用することができますか? – Satpal

+1

@SatpalそれはOPが求めているものです。 –

+6

さらに別のコードサービスですか? –

答えて

7

これはそれを行う必要があります。

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を渡された関数は、アレイ内のtrueごとのアイテムを返す場合。
Object.prototype.hasOwnProperty()はかなりわかりやすいです。

+1

神様!あなたはとても速く、これでいいです!期待していなかった。 –

4

あなたは、配列を反復処理し、指定されたプロパティが指定されたオブジェクトである場合in operator

とキーinオペレーター戻りtrueをチェックすることができます。プロトタイプからプロパティせずtoString等(例のように)

inオペレータとObject#hasOwnPropertyの差である、inチェックすべてのプロパティ、プロトタイプからのものも含め、唯一独自のプロパティ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

''差異 '(http://stackoverflow.com/questions/13632999/if-key-in-object-or-ifobject-hasownpropertykey)を 'in'と' hasOwnProperty'の間で言及すると便利だと思います。具体的には:_ "in演算子は、プロトタイプチェーンのプロパティに対してtrueを返します。" _有効な答えです。 – Cerbrus

-2

あなたは、これは `magic_function`どこにあるの

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

関連する問題