首页 > 解决方案 > 纯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);
}

标签: javascriptarrays

解决方案


你可以使用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];
}

推荐阅读