javascript - 纯javascript中的数组项切换简化
问题描述
是否可以进一步简化以下代码,或者这是最干净的方法?我要做的是,如果 action.payload 不包含在角色数组中,请将其推入其中,如果存在则将其删除。我不想为此使用 lodash。
const idx = state.rolesFilter.findIndex(
role => role === action.payload,
);
if (idx === -1) {
nextState.roles.push(action.payload);
} else {
nextState.roles = state.roles.filter(role => role !== action.payload);
}
解决方案
你可以使用Set
const set = new Set(state.roles);
const action = set.has(action.payload) ? 'delete' : 'add';
set[action](action.payload);
nextState.roles = [...set];
如果您打算经常使用“切换”,您可以创建一个函数
function toggle(array, item) {
const set = new Set(array);
const action = set.has(item) ? 'delete' : 'add';
set[action](item);
return [...set];
}