2016-10-16 67 views
1
var obj = {a: [], b: [1,2], c: [], d: [1]}; 

我如何获得对象的非空数组像下面这样:Lodash拒绝得到返回的对象

{b: [1,2], d: [1]} 
+0

什么是你想要做的,你尝试过什么到目前为止。展示你的工作。 – Soviut

回答

3

你可以使用pickBy()来做你以后的事情。

var result = _.pickBy(obj, function(val){ 
    return val.length > 0; 
}); 

小提琴这里:https://jsfiddle.net/W4QfJ/3160/

注:不像filter()reject(),这将返回一个对象,让你的原来的结构(而不​​是一个数组)。

+0

谢谢,它的工作原理! – user5671335

0

_.filter()是你在找什么:

var obj = {a: [], b: [1,2], c: [], d: [1]}; 

console.log(_.filter(obj, function(o){ return o.length; })) 
0

如果你想在你的标题中使用_.reject(),你可以这样做:

_.reject({a: [], b: [1,2], c: [], d: [1]},function(o){ 
    return o.length == 0 
}); 
+0

_.reject和_.filter有什么区别? – user5671335

+0

拒绝只是过滤器的反面。因此,如果您想忽略该元素,则拒绝您返回true。与过滤器相比,如果要保留该对象,则返回true。 –

+0

_.reject返回一个数组 – user5671335

2

另一种方式来做到这一点:_.omitBy(obj, _.isEmpty);

0

眼下,Lodash有一个名为_.omit方法,它不正是你所需要的:

> const object = {a: 1, b: 2, c: 3, d: 4} 
undefined 
> _.omit(object, ['a', 'c']) 
{ b: 2, d: 4 }