// 方法1: 使用索引判断
let arr = [0, 1, 2, 3, 4, 5, 6, 7];
let result = arr.filter((_, index) => index % 2 !== 0);
console.log(result); // [1, 3, 5, 7]
// 方法2: 位运算判断(性能更好)
let arr2 = [0, 1, 2, 3, 4, 5, 6, 7];
let result2 = arr2.filter((_, index) => index & 1);
console.log(result2); // [1, 3, 5, 7]
// 反向遍历,避免索引变化问题
let arr = [0, 1, 2, 3, 4, 5, 6, 7];
for (let i = arr.length - 1; i >= 0; i--) {
if (i % 2 === 0) {
arr.splice(i, 1);
}
}
console.log(arr); // [1, 3, 5, 7]
let arr = [0, 1, 2, 3, 4, 5, 6, 7];
let i = 0;
while (i < arr.length) {
if (i % 2 === 0) {
arr.splice(i, 1);
} else {
i++;
}
}
console.log(arr); // [1, 3, 5, 7]
let arr = [0, 1, 2, 3, 4, 5, 6, 7];
let result = arr.reduce((acc, cur, index) => {
if (index % 2 !== 0) {
acc.push(cur);
}
return acc;
}, []);
console.log(result); // [1, 3, 5, 7]
let arr = [0, 1, 2, 3, 4, 5, 6, 7];
let result = [];
arr.forEach((item, index) => {
if (index % 2 !== 0) {
result.push(item);
}
});
console.log(result); // [1, 3, 5, 7]
let arr = [0, 1, 2, 3, 4, 5, 6, 7];
let result = [];
for (let [index, value] of arr.entries()) {
if (index % 2 !== 0) {
result.push(value);
}
}
console.log(result); // [1, 3, 5, 7]
| 方法 | 是否修改原数组 | 时间复杂度 | 空间复杂度 | 适用场景 |
|---|---|---|---|---|
| filter | 否 | O(n) | O(n) | 需要保留原数组 |
| splice反向循环 | 是 | O(n²) | O(1) | 大数组慎用 |
| splice while循环 | 是 | O(n²) | O(1) | 小数组 |
| reduce | 否 | O(n) | O(n) | 函数式编程 |
// 优化方案:使用位运算提高性能
function removeEvenIndexes(arr) {
// 使用位运算判断奇数
return arr.filter((_, index) => index & 1);
// 或者直接创建新数组
// let result = [];
// for (let i = 1; i < arr.length; i += 2) {
// result.push(arr[i]);
// }
// return result;
}
/**
* 删除数组中偶数下标的元素
* @param {Array} array - 原始数组
* @param {boolean} inPlace - 是否原地修改
* @returns {Array} 处理后的数组
*/
function removeEvenIndexes(array, inPlace = false) {
if (inPlace) {
// 原地修改
for (let i = array.length - 1; i >= 0; i--) {
if (i % 2 === 0) {
array.splice(i, 1);
}
}
return array;
} else {
// 创建新数组
return array.filter((_, index) => index % 2 !== 0);
}
}
// 使用示例
const arr = [0, 1, 2, 3, 4, 5, 6, 7];
console.log(removeEvenIndexes(arr)); // [1, 3, 5, 7]
console.log(removeEvenIndexes(arr, true)); // 原地修改
index & 1 比取模运算性能更好
根据具体需求选择合适的方法: