JavaScript 或 Lodash 中是否有一个用于包含多个值的 include() 的单行代码?

问题描述 投票:0回答:2

在我的程序中,我经常验证对象。该验证通常包括检查对象是否具有所有定义的键。是否有一个简单的方法(简短的方法,最好是单个函数调用)来检查是否使用纯 JavaScript 或 Lodash(我也在使用)?

到目前为止,我按照下面的代码进行操作。我正在寻找一种更简洁的方法。

function validator(object) {
  let requiredKeys = ['key1', 'key2', 'key3'];
  for (let requiredKey of requiredKeys) {
    if (!object.hasOwnProperty(requiredKey)) {
      return false;
    }
  }
  return true;
}

validator({ key1: 1, key2: 2, key3: 3 });  // returns true
validator({ key1: 1, key2: 2 });           // returns false

注 1:我可以对

object
object.keys()
进行操作,因此单行函数可以对
Object
以及
Array
进行操作。

注2:

includes()
上有
Array
方法,但它只需要单个参数。我正在寻找一个需要多个版本的版本。

javascript lodash
2个回答
3
投票

您可以使用

Array#every
thisArg
检查该对象。

function check(object) {
    return ['key1', 'key2', 'key3'].every({}.hasOwnProperty, object);
}

console.log(check({}));
console.log(check({ key1: 1 }));
console.log(check({ key1: 1, key2: 2 }));
console.log(check({ key1: 1, key3: 3 }));
console.log(check({ key1: 0, key2: 0, key3: 0 }));

没有

thisArg

function check(object) {
    return ['key1', 'key2', 'key3'].every({}.hasOwnProperty.bind(object));
}

console.log(check({}));
console.log(check({ key1: 1 }));
console.log(check({ key1: 1, key2: 2 }));
console.log(check({ key1: 1, key3: 3 }));
console.log(check({ key1: 0, key2: 0, key3: 0 }));


0
投票

为了将其变成单行,我使用箭头函数循环遍历对象键:

function validator(obj){
  var arr=Object.keys(obj);
  let requiredKeys = ['key1', 'key2', 'key3'];
  return requiredKeys.filter(x => 
arr.includes(x)).length==requiredKeys.length;  
}
var t1 = validator({ key1: 1, key2: 2, key3: 3 });  // returns true
var t2 = validator({ key1: 1, key2: 2 });           // returns false
console.log(t1,t2);

© www.soinside.com 2019 - 2024. All rights reserved.