Javascript 在多个not条件下用筛选器替换数组会返回错误的结果
详细信息: 我有一个绑定到UI的对象数组。单击某个项目时,会触发切换过滤器方法。如果未选择该项,它将被推送到过滤器数组中(这很好)。但是,当我取消选择一个项目时,它会删除部分匹配筛选条件的所有项目 任何帮助都将不胜感激 数据:Javascript 在多个not条件下用筛选器替换数组会返回错误的结果,javascript,arrays,Javascript,Arrays,详细信息: 我有一个绑定到UI的对象数组。单击某个项目时,会触发切换过滤器方法。如果未选择该项,它将被推送到过滤器数组中(这很好)。但是,当我取消选择一个项目时,它会删除部分匹配筛选条件的所有项目 任何帮助都将不胜感激 数据: filters:[ {"column":"name","value":"Test 1"}, {"column":"name","
filters:[
{"column":"name","value":"Test 1"},
{"column":"name","value":"Test 2"},
{"column":"name","value":"Test 3"},
{"column":"shortName","value":"XXX"}
]
toggleFilter(item) {
item.active = !item.active
if(item.active) {
this.filters.push({ column: item.column, value: item.value })
}
else {
this.filters = this.filters.filter(f => (f.column !== item.column && f.value !== item.value))
}
}
方法:
filters:[
{"column":"name","value":"Test 1"},
{"column":"name","value":"Test 2"},
{"column":"name","value":"Test 3"},
{"column":"shortName","value":"XXX"}
]
toggleFilter(item) {
item.active = !item.active
if(item.active) {
this.filters.push({ column: item.column, value: item.value })
}
else {
this.filters = this.filters.filter(f => (f.column !== item.column && f.value !== item.value))
}
}
例如,如果我选择4个过滤器,然后取消选择对象值为测试3的过滤器,则列为名称的所有过滤器也将被删除
输出:
filters:[
{"column":"shortName","value":"XXX"}
]
filters:[
{"column":"name","value":"Test 1"},
{"column":"name","value":"Test 2"},
{"column":"shortName","value":"XXX"}
]
期望值:
filters:[
{"column":"shortName","value":"XXX"}
]
filters:[
{"column":"name","value":"Test 1"},
{"column":"name","value":"Test 2"},
{"column":"shortName","value":"XXX"}
]
我需要在两个条件下进行筛选,因为有时列可能不同,但值可能相同,我只想删除取消选择的一个并替换filters数组。即:
filters:[
{"column":"name","value":"test1"},
{"column":"shortName","value":"test1"}
]
TL;DR:将过滤器表达式中的
&&
更改为|
每当我遇到这样的问题时,我喜欢放慢速度,逐个运行匹配,以确保我了解我的逻辑是如何应用的:
项目
f
f.column!==项目.列
f.value!==项目价值
&&
| |
{“列”:“名称”,“值”:“测试3”}
{“列”:“名称”,“值”:“测试1”}
假的
真的
假的
真的
{“列”:“名称”,“值”:“测试3”}
{“列”:“名称”,“值”:“测试2”}
假的
真的
假的
真的
{“列”:“名称”,“值”:“测试3”}
{“列”:“名称”,“值”:“测试3”}
假的
假的
假的
假的
{“列”:“名称”,“值”:“测试3”}
{“column”:“shortName”,“value”:“XXX”}
真的
真的
真的
真的
您应该在id等数据中使用uniq标识符,它很容易跟踪和删除,其他事情您可以通过索引来管理。确定代码中发生了什么的最佳方法是使用调试器逐步检查代码。但我认为您希望或,不希望和,在筛选器中的两个条件之间。尝试此。。。谢谢,我一直在想它需要一个新的,我甚至懒得试一下手术室,它是有效的。