Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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 使用reduce从数组中删除项_Javascript_Arrays_Higher Order Functions - Fatal编程技术网

Javascript 使用reduce从数组中删除项

Javascript 使用reduce从数组中删除项,javascript,arrays,higher-order-functions,Javascript,Arrays,Higher Order Functions,我需要一些帮助来从数组中删除项。我有许多复选框,每个复选框都有一个动态创建的数据属性。取消选中复选框时,我想从数组中删除与每个数组项的item.sector值匹配的项。我不能完全让它工作。任何帮助都将不胜感激 let mapMarkers = []; function addFilter(self) { const markerObject = filterObject[self.id]; const markerID = markerObject[0]["id

我需要一些帮助来从数组中删除项。我有许多复选框,每个复选框都有一个动态创建的数据属性。取消选中复选框时,我想从数组中删除与每个数组项的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
方法,所以它可能是一个数组

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

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

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

或者,正如注释中所建议的,您可以使用
过滤器

减少
的第二个参数是初始值,即
acc
的初始值。因为您正在调用
acc
上的
push
方法,所以它可能是一个数组

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

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

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

或者,正如评论中所建议的,您可以使用
filter

您可以使用
filter
insetad of
reduce
您可以使用
filter
insetad of
reduce
感谢您的回复。这很有效,非常好。但是,当我注销mapMarkers时,它会显示应该过滤掉的条目,而不是我想要保留的条目。您可以通过否定运算符来反转“选择”:change!==致===谢谢您的回复。这很有效,非常好。但是,当我注销mapMarkers时,它会显示应该过滤掉的条目,而不是我想要保留的条目。您可以通过否定运算符来反转“选择”:change!==到===