繁体   English   中英

lodash / underscore检查一个对象是否包含来自另一个对象的所有键/值

[英]lodash/underscore check if one object contains all key/values from another object

这可能是一个简单的问题,但我无法从lodash API文档和Google中找到答案。

我们假设我有一个像这样的对象:

var obj = {
  code: 2,
  persistence: true
}

我想要一个函数,我可以传递一个键/值对,如果键存在于我的对象中并且具有指定的值,则返回true:

_.XXXX(obj, {code: 2});  //true
_.XXXX(obj, {code: 3});  //false
_.XXXX(obj, {code: 2, persistence: false});  //false
_.XXXX(obj, {code: 2, persistence: true});   //true

这有点像where()但只有一个对象。

你可以使用匹配器

var result1 = _.matcher({ code: 2 })( obj );  // returns true
var result2 = _.matcher({ code: 3 })( obj );  // returns false

用mixin:

_.mixin( { keyvaluematch: function(obj, test){
    return _.matcher(test)(obj);
}});

var result1 = _.keyvaluematch(obj, { code: 2 });  // returns true
var result2 = _.keyvaluematch(obj, { code: 3 });  // returns false

编辑

下划线的1.8版添加了一个_.isMatch函数。

https://lodash.com/docs#has

var obj = {
  code: 2,
  persistence: true
};

console.log(_.has(obj, 'code'));

我最初误解你的要求是不好的。

以下是_.some https://lodash.com/docs#some的更正答案

var obj = {
  code: 2,
  persistence: true
};

console.log( _.some([obj], {code: 2}) );
console.log( _.some([obj], {code: 3}) );
console.log( _.some([obj], {code: 2, persistence: false}) );
console.log( _.some([obj], {code: 2, persistence: true}) );

诀窍是将要检查的对象转换为数组,以便_.some能够发挥其魔力。

如果你想要一个更好的包装器而不必用[]手动转换它,我们可以编写一个包装转换的函数。

var checkTruth = function(obj, keyValueCheck) {
  return _.some([obj], keyValueCheck);
};

console.log( checkTruth(obj, {code: 2}) );
... as above, just using the `checkTruth` function now ...

我不认为有一个单一的下划线功能,但你可以很容易地写一个:

function sameObject(ob1, ob2) {
   for (var key in ob2) {
      if (ob2[key] != ob1[key]) {
          return false;
      }
   }
   return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM