我创建了列,我有一个显示列名称的复选框。当我单击一个复选框时,我会得到一个存储在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)
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句