如果项目不存在,我会使用lodash将项目插入数组中,如果项目存在则将其删除,切换为"切换"。
我的代码如下所示:
var items = ['a', 'b', 'c'];
var itemToToggle = 'a';
if (_.includes(items, itemToToggle)) {
_.pull(items, itemToToggle)
}
else {
items.push(itemToToggle)
}
这似乎不够完美。
我是否可以将其简化为理想情况下的_.toggle(items, itemToToggle)
?
答案 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;
}