如何解决我想用相同但使用reduce完成的forEach函数替换这个函数你能说我哪里做错了吗?
我创建了列,并且有一个显示列名称的复选框。当我点击一个复选框时,我会得到一个存储在 checkedKeys
中的选中名称数组。现在 checkableColumns
包含所有可能的可检查值。
那些在 checkableColumns 但不在 checkedKeys 中的元素是那些将从表的列中消失的列。
我不会从所有列中过滤,因为某些列应该始终可见。
这是 reduce 和 forEach 的常见部分:
const columns = initColumns();
const checkableColumns = ["n","yi","ui","r","t"];
const notCheckedValues = checkableColumns.filter(col=>!checkedKeys.includes(col));
const filteredColumns =[];
这里是我如何用 forEach 解决的:
columns.forEach(column=>{
if(!notCheckedValues.includes(column.dataIndex)){
filteredColumns.push(column);
}
})
这里我试图用reduce来解决,但它不起作用,我不明白:
const filteredColumns = columns.reduce((allColumns,currentColumn)=>{
if(notCheckedValues.includes(currentColumn.dataIndex)){
return allColumns;
}
console.log("all cols",allColumns,"push",allColumns.push(currentColumn))
return allColumns.push(currentColumn)
},[])
解决方法
Array.prototype.push
不返回数组,而是返回数组的新长度:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push
相反,您需要在推入后返回累加器:
const filteredColumns = columns.reduce((allColumns,currentColumn) => {
if (notCheckedValues.includes(currentColumn.dataIndex)) {
return allColumns;
}
allColumns.push(currentColumn)
return allColumns
},[])
不过,您也可以使用 Array.prototype.filter
:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
const filteredColumns = columns.filter((currentColumn) => {
return !notCheckedValues.includes(currentColumn.dataIndex)
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。