javascript - 使用reduce从数组中删除项目

标签 javascript arrays higher-order-functions

我需要一些帮助来从数组中删除项目。我有许多复选框,每个复选框都有一个动态创建的数据属性。取消选中复选框时,我想从数组中删除与每个数组项的 item.sector 值匹配的项。我不能完全让它工作。任何帮助将不胜感激。

let mapMarkers = [];

function addFilter(self) {
        const markerObject = filterObject[self.id];
        const markerID = markerObject[0]["id"];
        const dataSetSector = self.dataset.sector;
        const dataSetYear = self.dataset.year;

        if (self.checked) {
            mapMarkers.push(markerObject);
        } else {
            // data attribute SECTOR exists
            if (self.hasAttribute("data-sector")) {
                mapMarkers = mapMarkers.reduce((acc, curr) => {             
                    if (curr.sector !== dataSetSector) acc.push(curr);
                    return acc;
                });
            } 
            // data attribute YEAR exists
            else if (self.hasAttribute("data-year")) {
                mapMarkers = mapMarkers.reduce((acc, curr) => {         
                    if (curr.sector !== dataSetYear) acc.push(curr);
                    return acc;
                });
            }
        }
    }  

最佳答案

reduce的第二个参数是初始值,即acc的初始值。由于您在 acc 上调用 push 方法,因此它可能应该是一个数组。

当您省略第二个参数时,数组中的第一个元素将用作初始值。即:第一次调用需要 (mapMarkers[0], mapMarkers[1])

要解决此问题,请将新数组传递给 reduce 方法:

mapMarkers = mapMarkers.reduce((acc, curr) => {             
  if (curr.sector !== dataSetSector) acc.push(curr);
  return acc;
}, []);
//  ^--- change

或者,按照评论中的建议,您可以使用过滤器

关于javascript - 使用reduce从数组中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49257271/

相关文章:

javascript - 在 Mongoose 中创建多对多关系,填充不是函数

javascript - 在 javascript 中存储数组 for javascript

javascript - 如何动态地将新行添加到表中,每行都有表标题和列?

javascript - 关于高阶函数回调中的 ‘this’ 的问题

swift - 高阶函数 : "Cannot invoke ' map' with an argument list of type '((_) -> _)' "

javascript - 检测是否从同一网站打开了一个窗口

java - 检查 javascript 函数是从 java applet 定义的

c - 程序集,无法将数组值从堆栈添加到寄存器

python - 在两个 numpy 数组中查找最接近的值

javascript - Node.js - 高阶一元函数 - 为什么需要这个?