简化"切换"的代码一个数组项

时间:2015-11-04 09:47:21

标签: javascript lodash

如果项目不存在,我会使用lodash将项目插入数组中,如果项目存在则将其删除,切换为"切换"。

我的代码如下所示:

var items = ['a', 'b', 'c'];
var itemToToggle = 'a';

if (_.includes(items, itemToToggle)) {
    _.pull(items, itemToToggle)
}
else {
    items.push(itemToToggle)
}

这似乎不够完美。 我是否可以将其简化为理想情况下的_.toggle(items, itemToToggle)

2 个答案:

答案 0 :(得分:10)

另一种方法是使用lodash的xor

var items = ['a', 'b', 'c'];
var itemToToggle = 'a';

new_array = _.xor(items, [itemToToggle])

return new_array // ['b', 'c']

如果项目不存在,将添加项目,如果项目不存在则删除。

它通过比较两个数组(items[itemToToggle])并返回一个新数组来实现这一点,该数组是两个数组的合并,减去重复数。

答案 1 :(得分:2)

你的代码对我来说似乎没问题。我能想到的唯一的事情是使用长度来查看项目是否被删除,如果没有,添加它:

function toggleValueInArr(arr, value) {
    var originalLength = arr.length; // cache the original length

    _.pull(arr, value).length === originalLength && arr.push(value); // check if the length is the same as the original - ie no item was not removed. If so, push it.

    return arr;
}