我似乎正在进行大脑冻结,无法通过索引删除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);
});
答案 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;
}