Loop to remove an element in array with multiple occurrences

arrays, javascript

Solution

You have a built in function called `filter` that filters an array based on a predicate (a condition).

It doesn't alter the original array but returns a new filtered one.

var array=["hello","hello","world",1,"world"];
var filtered = array.filter(function(element) {
    return element !== "hello";
}); // filtered contains no occurrences of hello

You can extract it to a function:

function without(array, what){
    return array.filter(function(element){ 
        return element !== what;
    });
}

However, the original filter seems expressive enough.

Here is a link to its documentation

Your original function has a few issues:

- It iterates the array using a `for... in` loop which has no guarantee on the iteration order. Also, don't use it to iterate through arrays - prefer a normal `for...` loop or a `.forEach`

- You're iterating an array with an off-by-one error so you're skipping on the next item since you're both removing the element and progressing the array.

Problem

I want to remove an element in an array with multiple occurrences with a function. ``` var array=["hello","hello","world",1,"world"]; function removeItem(item){ for(i in array){ if(array[i]==item) array.splice(i,1); } } ``` ``` removeItem("world"); //Return hello,hello,1 ``` ``` removeItem("hello"); //Return hello,world,1,world ``` This loop doesn't remove the element when it repeats twice in sequence, only removes one of them. Why?

Original source

Related problems