Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在多个not条件下用筛选器替换数组会返回错误的结果_Javascript_Arrays - Fatal编程技术网

Javascript 在多个not条件下用筛选器替换数组会返回错误的结果

Javascript 在多个not条件下用筛选器替换数组会返回错误的结果,javascript,arrays,Javascript,Arrays,详细信息: 我有一个绑定到UI的对象数组。单击某个项目时,会触发切换过滤器方法。如果未选择该项,它将被推送到过滤器数组中(这很好)。但是,当我取消选择一个项目时,它会删除部分匹配筛选条件的所有项目 任何帮助都将不胜感激 数据: filters:[ {"column":"name","value":"Test 1"}, {"column":"name","

详细信息: 我有一个绑定到UI的对象数组。单击某个项目时,会触发切换过滤器方法。如果未选择该项,它将被推送到过滤器数组中(这很好)。但是,当我取消选择一个项目时,它会删除部分匹配筛选条件的所有项目

任何帮助都将不胜感激

数据

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标识符,它很容易跟踪和删除,其他事情您可以通过索引来管理。确定代码中发生了什么的最佳方法是使用调试器逐步检查代码。但我认为您希望或,不希望和,在筛选器中的两个条件之间。尝试此。。。谢谢,我一直在想它需要一个新的,我甚至懒得试一下手术室,它是有效的。