gpt4 book ai didi

javascript - javascript 中的过滤器数组在存在多个过滤器值时未找到时删除项目

转载 作者:行者123 更新时间:2023-12-02 23:23:04 26 4
gpt4 key购买 nike

考虑列表中有多个要过滤的过滤器值。在第一次迭代中,如果第一个过滤器值与列表中的任何项目都不匹配,则所有项目都将被删除,并且我将没有元素可以使用第二个过滤器值来过滤列表。

我正在尝试使用以下代码在 javascript 中过滤我的数组。我有一个管理员列表,我想根据事件 ID 过滤管理员。如果我有 2 个要使用列表过滤的事件 ID,下面的代码将失败。

if(aEventIds.length > 0) {
aEventIds.forEach(function(eventId) {
aAdminList = aAdminList.filter(function(item) {
searchedOrFiltered = true;
return (item.event_ids.includes(parseInt(eventId)));
});
});
}

最佳答案

Array.prototype.filter 回调函数应返回一个 bool 值,指示是否保留当前迭代的值。您需要做的就是反转您的逻辑,以便您的过滤器考虑您的每个 id,而不是使用每个 id 来执行单独的过滤。

因此,如果这是对 ID 进行 OR 运算,则:

let aAdminList = [{event_ids: [1, 5, 8]},{event_ids: [3, 6, 9]},{event_ids: [2, 4, 8]}];
let aEventIds = [5, 8];

let output = aAdminList.filter(item => {
searchedOrFiltered = true;
let result = [];
aEventIds.forEach(eventId => {
result.push(item.event_ids.includes(parseInt(eventId)));
});
// OR OP
return result.includes(true);
});

console.log(output);

否则,如果这是 ID 上的 AND 运算,则:

let aAdminList = [{event_ids: [1, 5, 8]},{event_ids: [3, 6, 9]},{event_ids: [2, 4, 8]}];
let aEventIds = [5, 8];

let output = aAdminList.filter(item => {
searchedOrFiltered = true;
let result = [];
aEventIds.forEach(eventId => {
result.push(item.event_ids.includes(parseInt(eventId)));
});
// AND OP
return result.every(i=>i===true);
});

console.log(output);

关于javascript - javascript 中的过滤器数组在存在多个过滤器值时未找到时删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56859899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com