Ale*_*ack 6 javascript underscore.js lodash
这可能是一个简单的问题,但我无法从lodash API文档和Google中找到答案.
我们假设我有一个像这样的对象:
var obj = {
code: 2,
persistence: true
}
Run Code Online (Sandbox Code Playgroud)
我想要一个函数,我可以传递一个键/值对,如果键存在于我的对象中并且具有指定的值,则返回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
Run Code Online (Sandbox Code Playgroud)
这在某种程度上where()只适用于一个对象.
你可以使用匹配器:
var result1 = _.matcher({ code: 2 })( obj ); // returns true
var result2 = _.matcher({ code: 3 })( obj ); // returns false
Run Code Online (Sandbox Code Playgroud)
用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
Run Code Online (Sandbox Code Playgroud)
编辑
下划线的1.8版添加了一个_.isMatch函数.
var obj = {
code: 2,
persistence: true
};
console.log(_.has(obj, 'code'));
Run Code Online (Sandbox Code Playgroud)
我最初误解你的要求是不好的.
以下是https://lodash.com/docs#some的更正答案_.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}) );
Run Code Online (Sandbox Code Playgroud)
诀窍是将要检查的对象转换为数组,这样_.some才能发挥其魔力.
如果你想要一个更好的包装器而不必手动转换它[],我们可以编写一个包装转换的函数.
var checkTruth = function(obj, keyValueCheck) {
return _.some([obj], keyValueCheck);
};
console.log( checkTruth(obj, {code: 2}) );
... as above, just using the `checkTruth` function now ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13574 次 |
| 最近记录: |