2016-09-20 77 views
1

我正在使用lodash _.filter函数。在过滤时,如果与相继的元素相同,我想删除元素。在此代码,显示lodash过滤器和排除值

下面是这种情况,

fObj=[1,2,3] 
template=[{"v":1,"d":"ABC","disabled":true},{"v":2,"d":"xyz","disabled":true},{"v":3,"d":"PQR","disabled":false},{"v":4,"d":"lmn","disabled":true}] 
arr = _.filter(template, function (item) 
{ 
    return item.disabled === true || fObj.indexOf(item.vm) !== -1; 
}); 

这是一种父子的,假设ABC,XYZ是父母。没有孩子的父母必须被移除。 由于XYZ有一个孩子PQR,我应该同时显示。父母和孩子之间没有任何关系。 我们必须假设,当两个连续的元素被禁用= true时,我想删除这两个元素。

2父母(ABC和LMN),它没有按;吨有孩子应该被删除

回答

0

我做了一个例子,你

var arr = _.filter(template, function (item, index) 
{ 
    if(item.needToBeRemoved) { 
     return false; 
    } else { 
     var isNotTheLastElement = index < (template.length - 1); 
     if(isNotTheLastElement) { 
      var nextItem = template[index+1]; 
      if(item.disabled && nextItem.disabled) { 
       nextItem.needToBeRemoved = true; 
       return false 
      } 
     } 
    } 
    return true; 
}); 

这里是jsFiddle

+0

你要我用_ .reject而不是_.filter – user1015388

+0

您可以使用过滤器实现同样的功能。我只是使用拒绝,因为它对我更有意义。我会很好,并更新与筛选器的例子:) –

+0

现在你有同样的事情,但使用过滤器,而不是。 –