我想使用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函数进行查询?
答案 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
来取消它。