按索引删除数组元素

时间:2015-12-03 21:40:47

标签: javascript jquery arrays

我似乎正在进行大脑冻结,无法通过索引删除JS数组元素。下面有什么根本的愚蠢的东西吗?

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


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

我想要做的就是使用索引位置0,1和3(在此示例中)从数组中删除元素 - 但是,当我使用splice尝试此操作时,它会混乱索引。

请参阅:

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

4 个答案:

答案 0 :(得分:2)

尝试这样的事情

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

实施例

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

解释

要从数组中删除元素,请使用delete关键字。这将使该索引处的值为undefined。然后,您需要过滤数组,并删除未定义的元素。

答案 1 :(得分:1)

您可以为每个拼接操作调整拼接的索引。

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>');

答案 2 :(得分:0)

问题是当你删除元素0时,数组向下移动1并且你的其他元素位于错误的位置。解决此问题的一种方法是按降序对输入els数组进行排序,使其弹出元素3,然后是1,然后是0。

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

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

答案 3 :(得分:0)

理查德汉密尔顿的变化。请注意,我们两个都将返回 new 数组,而不是实际修改原始数组对象。

input:required:invalid{
outline-color:red;
outline-width:thin;
}