나는 jessegavin's 대답을 좋아하지만, 나는 깊은 건물 일치에 lodash-deep을 사용하여 확대했다.
var posts = [{ term: { name: 'A', process: '123A' } },
{ term: { name: 'B', process: '123B' } },
{ term: { name: 'C', process: '123C' } }];
var result = _.filterByValues(posts, 'term.process', ['123A', '123C']);
// results in objects A and C to be returned
jsFiddle
_.mixin({
'filterByValues': function(collection, key, values) {
return _.filter(collection, function(o) {
return _.contains(values, resolveKey(o, key));
});
}
});
function resolveKey(obj, key) {
return (typeof key == 'function') ? key(obj) : _.deepGet(obj, key);
}
당신이 lodash 깊은 신뢰하지 않거나 당신이 여기보다 방어하고 강력한 버전입니다, 이름에 점을 속성에 대한 지원을 원하는 경우 :
function resolveKey(obj, key) {
if (obj == null || key == null) {
return undefined;
}
var resolved = undefined;
if (typeof key == 'function') {
resolved = key(obj);
} else if (typeof key == 'string') {
resolved = obj[key];
if (resolved == null && key.indexOf(".") != -1) {
resolved = _.deepGet(obj, key);
}
}
return resolved;
}
가
아니요.그러나 Arrays 프로토 타입의'filter()'메소드를 직접 다룰 수있다. 더 깨끗하게 보입니다. – gustavohenke