Javascript 使用reduce从数组中删除项
我需要一些帮助来从数组中删除项。我有许多复选框,每个复选框都有一个动态创建的数据属性。取消选中复选框时,我想从数组中删除与每个数组项的item.sector值匹配的项。我不能完全让它工作。任何帮助都将不胜感激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
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 ofreduce
您可以使用filter
insetad ofreduce
感谢您的回复。这很有效,非常好。但是,当我注销mapMarkers时,它会显示应该过滤掉的条目,而不是我想要保留的条目。您可以通过否定运算符来反转“选择”:change!==致===谢谢您的回复。这很有效,非常好。但是,当我注销mapMarkers时,它会显示应该过滤掉的条目,而不是我想要保留的条目。您可以通过否定运算符来反转“选择”:change!==到===