我有一个数组,例如var aa = ["a","b","c","d","e","f","g","h","i","j","k","l"];
我想要删除位于偶数索引位置上的元素,输出结果应该是 aa = ["a","c","e","g","i","k"];
我尝试过以下方法
for (var i = 0; aa.length; i = i++) {
if(i%2 == 0){
aa.splice(i,0);
}
};
但它没有起作用。
我有一个数组,例如var aa = ["a","b","c","d","e","f","g","h","i","j","k","l"];
我想要删除位于偶数索引位置上的元素,输出结果应该是 aa = ["a","c","e","g","i","k"];
我尝试过以下方法
for (var i = 0; aa.length; i = i++) {
if(i%2 == 0){
aa.splice(i,0);
}
};
但它没有起作用。
使用 Array#filter
方法
var aa = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"];
var res = aa.filter(function(v, i) {
// check the index is odd
return i % 2 == 0;
});
console.log(res);
var aa = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"],
// variable for storing delete count
dCount = 0,
// store array length
len = aa.length;
for (var i = 0; i < len; i++) {
// check index is odd
if (i % 2 == 1) {
// remove element based on actual array position
// with use of delete count
aa.splice(i - dCount, 1);
// increment delete count
// you combine the 2 lines as `aa.splice(i - dCount++, 1);`
dCount++;
}
}
console.log(aa);
通过另一种方式按相反的顺序迭代for循环(从最后一个元素到第一个元素)。
var aa = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"];
// iterate from last element to first
for (var i = aa.length - 1; i >= 0; i--) {
// remove element if index is odd
if (i % 2 == 1)
aa.splice(i, 1);
}
console.log(aa);
aa = aa.filter
而不是var res = aa.filter
。 - Jaromanda X通过这种方式,您可以删除所有备用索引
var aa = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"];
for (var i = 0; i < aa.length; i++) {
aa.splice(i + 1, 1);
}
console.log(aa);
var aa = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"];
var x = [];
for (var i = 0; i < aa.length; i = i + 2) {
x.push(aa[i]);
}
console.log(x);
.filter()
。 aa = aa.filter((value, index) => !(index%2));
var a = [1,2,3,4,5,6,7,8,9,334,234,234,234,6545,7,567,8]
var temp = [];
for(var i = 0; i<a.length; i++)
if(i % 2 == 1)
temp.push(a[i]);
a = temp;
var aa = ["a","b","c","d","e","f","g","h","i","j","k","l"];
var bb = aa.filter((item,index,arr)=>(arr.splice(index,1)));
console.log(bb);
我在这里读到splice
的时间复杂度为O(N)。 不要在循环中使用它!
一个简单的替代方法是就地删除奇数索引:
for (let idx = 0; idx < aa.length; idx += 2)
aa[idx >> 1] = aa[idx];
aa.length = (aa.length + 1) >> 1;
我使用x >> 1
作为Math.floor(x/2)
的快捷方式。
const aa = ["a","b","c","d","e","f","g","h","i","j","k","l"];
let bb = aa.filter((items, idx) => idx % 2 !== 0)
aa = aa.filter(function (v,i) { return !(i%2); });
- Jaromanda Xaa.length
始终为“真值”。 - Jaromanda X