bsod99
bsod99

Reputation: 1297

Remove array elements by index

I seem to be having a brain-freeze and am unable to remove JS array elements by index. Is there something fundamentally idiotic in the below?

var els;
[0, 1, 3]
0: 0
1: 1
2: 3


["Colour", "Font", "Icon", "Line 1"]
0: "Colour"
1: "Font"
2: "Icon"
3: "Text"

All I want to do is remove the elements from the array using index positions 0, 1 and 3 (in this example) - however, when I try this using splice, it messes up the indexes.

See:

els.each(function(key, val) {
            console.log(key);
            req-fields.splice(key,1);
        });

Upvotes: 1

Views: 626

Answers (4)

Nina Scholz
Nina Scholz

Reputation: 386570

You can adjust the index of the splice for every splicing action.

var fields = ["Colour", "Font", "Icon", "Line 1"],
    els = [0, 1, 3];

els.forEach(function (val, i) {
    fields.splice(val - i, 1);
});

document.write('<pre>' + JSON.stringify(fields, 0, 4) + '</pre>');

Upvotes: 1

Katana314
Katana314

Reputation: 8610

Variation on Richard Hamilton's. Note that both of ours will return a new array, not actually modify the original array object.

function removeIndexes(array, indexes) {
    return array.filter(function(element, i) {
        return indexes.indexOf(i) === -1;
    });
}

Upvotes: 1

Jeff
Jeff

Reputation: 25221

The issue is when you remove element 0, the array gets shifted down by 1 and your other elements are in the wrong positions. One way to solve this would be to sort your input els array in descending order so it will pop element 3, then 1, then 0.

els.sort(function(a, b){return b-a});

els.each(function(key, val) {
        console.log(key);
        req-fields.splice(key,1);
    });

Upvotes: 0

Richard Hamilton
Richard Hamilton

Reputation: 26434

Try something like this

function removeIndex(array, index) {
    delete array[index];
    array = array.filter(function(element) {
        return element != undefined
    });
    return array;
}

Example

removeIndex([1,4,7,13,41,16],3);
=> [1,4,7,41,16]

Explanation

To delete an element from an array, you use the delete keyword. This will make the value at that index undefined. You then need to filter the array, and remove undefined elements.

Upvotes: 3

Related Questions