Lodash的“无”按属性和输入数组

时间:2019-01-18 12:06:07

标签: javascript angular typescript lodash

我想使用lodash的“ without”,对象属性和值数组来创建函数。类似于“包含”

我的“ _。include()” 功能代码是:

 this.filters = {} //hold filter function for one or many columns in table
 this.columnName = 'id'

 this.tempQuery = [1,2]

 this.data = [
 {
  id: 1,
  name: 'aaa',
  rejectedNumber: 1
 },  
 {
  id: 2,
  name: 'bbb',
  rejectedNumber: 2
 },
 {
  id: 3,
  name: 'bbb',
  rejectedNumber: 3
 }
]

 this.filters[this.columnName] = _.partial(_.includes, this.tempQuery);

 this.filteredData = _.filter( this.data, _.conforms( this.filters ));

我的输出是

 this.filteredData = [ 
{
  id: 1,
  name: 'aaa',
  rejectedNumber: 1
 },  
 {
  id: 2,
  name: 'bbb',
  rejectedNumber: 2
 }]

但是我无法使用“ _.without”功能进行类似的操作

this.filters[this.columnName] = _.partial(_.without, this.tempQuery);

不起作用-返回所有数据...

任何想法如何使用lodash函数进行查询?

2 个答案:

答案 0 :(得分:0)

您只是想使用tmp遍历您的集合,然后根据要过滤的内容返回一个true / falsey值。 Option Explicit Sub ArrayofArrays() Dim tmp As Variant Dim OuterArray() As Variant ReDim OuterArray(0 To 0) Dim InnerArray() As Variant ReDim InnerArray(0 To 0) InnerArray(0) = "Foo" OuterArray(0) = InnerArray tmp = OuterArray(0) ReDim Preserve tmp(LBound(tmp) To UBound(tmp) + 1) OuterArray(0) = tmp Erase tmp OuterArray(0)(1) = "Bar" Debug.Print OuterArray(0)(1) End Sub 会检查给定的集合中是否存在传递的值。然后,您可以用这种方式过滤掉您的集合,因为_.filter将返回一个新数组。

笔:https://codepen.io/joshuakelly/pen/aPgLmL

_.includes

答案 1 :(得分:0)

您不能仅将_.includes替换为_.without的原因是它们彼此不是相反的。它们的共同点是,它们采用的第一个参数可以是数组(这是您使用的数组)。但是相似之处到此为止。它们有很大的不同:

  • _.includes返回一个布尔值,指示第二个参数是否出现在数组中

  • _.without返回一个数组,该数组包括原始数组中除第二个参数(以及其他参数值,如果提供)之外的值。

由于数组始终是真实值,因此_.conform函数(基于_.without时)将始终返回true。

_.without创建_.includes的反义词,而不是_.negate

this.filters[this.columnName] = _.partial(_.negate(_.includes), this.tempQuery);

我想您不想触及_.filter的使用,但是作为替代,您也可以使用_.reject来取消它。