2017-05-29 58 views
-1

驗證JavaScript對象鍵鑑於以下數組針對陣列

const validKeyNames = ['name', 'gender', 'hasTheForce'] 

是否有可能檢查的對象鍵是一個數組元素之一。

我希望能夠做一些事情,如:使用includes()

const validKeyNames = ['name', 'gender', 'hasTheForce'] 
 
var a = { name: 'Luke Skywalker', gender: 'Male', hasTheForce: true } 
 
var b = { name: 'James Brown', gender: 'Male', hasTheFunk: true } 
 

 
function check(obj, arr) { 
 
    return Object.keys(obj).every(e => arr.includes(e)); 
 
} 
 

 
console.log(check(a, validKeyNames)) 
 
console.log(check(b, validKeyNames))

+0

@ synthet1c請解釋一下爲什麼? 'hasTheFunk'不是'validKeyNames'之一 – malimichael

+0

誤讀對象鍵 – synthet1c

回答

3

您可以在Object.Keys()使用every()和檢查重點在數組存在會給你一個關於如何實現這一點的想法。

1.首先使用.sort()排除有效密鑰陣列。

2.對於對象中的每個鍵(使用for in循環),檢查它是否存在於valids數組中,直到key <= array[iterator]。只要key > array[iterator]您可以安全地確認該數組中不存在密鑰。

+0

太棒了,這工作謝謝 – malimichael

+0

@malimichael不客氣。 –

0

{ name: 'Luke Skywalker', gender: 'Male', hasTheForce: true } // => true 
{ name: 'James Brown', gender: 'Male', hasTheFunk: true } // => false 
0

您可以使用Object.hasOwnProperty並綁定對象進行檢查。

function check(object) { 
 
    return validKeyNames.every({}.hasOwnProperty.bind(object)); 
 
} 
 

 
const validKeyNames = ['name', 'gender', 'hasTheForce'] 
 

 
console.log(check({ name: 'Luke Skywalker', gender: 'Male', hasTheForce: true })); // true 
 
console.log(check({ name: 'James Brown', gender: 'Male', hasTheFunk: true })); // false

+0

是的,但是當你擁有一個像'{名字:'Luke Skywalker'',性別:'男',hasTheForce:true,batter:'boo'}}的目標對象時,這個失敗仍然比接受的答案更有效... – Redu

+0

@Redu,在上述情況下失敗了? –

+1

OP說「檢查一個對象鍵是數組元素之一」...所以作爲一個對象鍵(屬性)的'batter'不是數組元素之一..但是你的代碼返回'true'.check一個對象鍵是數組元素之一 – Redu