针对数组验证javascript对象键

时间:2017-05-29 10:25:41

标签: javascript arrays

给出以下数组

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

是否可以检查对象键是数组元素之一

我希望能够做到这样的事情:

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

3 个答案:

答案 0 :(得分:3)

您可以在every()上使用Object.Keys()并使用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))

答案 1 :(得分:0)

我会告诉你如何实现这个目标。

1.最初使用.sort()排序有效密钥数组。

2.对于对象中的每个键(使用for in循环),在key <= array[iterator]之前检查它是否存在于valid数组中。只要key > array[iterator],您就可以安全地确认数组中没有该键。

答案 2 :(得分:0)

您可以使用Object.hasOwnProperty并绑定对象进行检查。

&#13;
&#13;
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
&#13;
&#13;
&#13;