You can remove elements from the end of an array using pop, from the beginning using shift, or from the middle using splice. The JavaScript Array filter method to create a new array with desired items, a more advanced way to remove unwanted elements.
To replace an element in an array:Use the indexOf() method to get the index of the element you want to replace. Call the Array. splice() method to replace the element at the specific index. The array element will get replaced in place.
JavaScript Array pop()The pop() method removes (pops) the last element of an array. The pop() method changes the original array. The pop() method returns the removed element.
To trim all strings in an array:Use the map() method to iterate over the array and call the trim() method on each array element. The map method will return a new array, containing only strings with the whitespace from both ends removed.
You could do it without a 3rd party library, this would be more efficient, like this. (this only removes the first instance of a value if found, not multiple)
Javascript
var a = [0, 1, 2, 3, 4, 6, 7, 8, 9],
b = 5,
c = 6;
function addOrRemove(array, value) {
var index = array.indexOf(value);
if (index === -1) {
array.push(value);
} else {
array.splice(index, 1);
}
}
console.log(a);
addOrRemove(a, b);
console.log(a);
addOrRemove(a, c);
console.log(a);
Output
[0, 1, 2, 3, 4, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 6, 7, 8, 9, 5]
[0, 1, 2, 3, 4, 7, 8, 9, 5]
On jsfiddle
You can use the lodash function "xor":
_.xor([2, 1], [2, 3]);
// => [1, 3]
If you don't have an array as 2nd parameter you can simpy wrap the variable into an array
var variableToInsertOrRemove = 2;
_.xor([2, 1], [variableToInsertOrRemove]);
// => [1]
_.xor([1, 3], [variableToInsertOrRemove]);
// => [1, 2, 3]
Here's the doc: https://lodash.com/docs/4.16.4#xor
For immutable state ( clone array ):
const addOrRemove = (arr, item) => arr.includes(item) ? arr.filter(i => i !== item) : [ ...arr, item ];
see also: Remove properties from objects (JavaScript)
If you care about efficiency then may be using an array to implement a set is a bad idea. For example using an object you could do:
function toggle(S, x) {
S[x] = 1 - (S[x]|0);
}
then after many add/remove operations you can keep only keys where the value is 1
This way every addition/removal is O(1)
and you need only one O(n)
operation to get the final result.
If keys are all "small" numbers may be a bitmask is even worth the effort (not tested)
function toggle(S, x) {
var i = x >> 4;
S[i] = (S[i]|0) ^ (1<<(x&15));
}
Look at this answer of similar question.
Lodash issue
Lodash gist
Code:
function toggle(collection, item) {
var idx = collection.indexOf(item);
if (idx !== -1) {
collection.splice(idx, 1);
} else {
collection.push(item);
}
}
If "types" can be a Set then
let toggle = type_id => this.types.delete(type_id) || this.types.add(type_id);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With