欢迎光临南安市分类吧
详情描述

1. filter方法(推荐)

// 方法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]

2. for循环(反向遍历)

// 反向遍历,避免索引变化问题
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]

3. while循环

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]

4. reduce方法

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]

5. forEach方法(需要新数组)

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]

6. for...of循环(需要索引)

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]

7. 性能对比

原地修改 vs 创建新数组

方法 是否修改原数组 时间复杂度 空间复杂度 适用场景
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;
}

8. 通用函数封装

/**
 * 删除数组中偶数下标的元素
 * @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)); // 原地修改

总结

filter方法是最简洁、最易读的,推荐使用 如果需要原地修改,使用反向循环+splice 对于大数组,避免使用splice,因为时间复杂度为O(n²) 使用位运算 index & 1 比取模运算性能更好

根据具体需求选择合适的方法:

  • 需要保留原数组 → 使用filter
  • 需要修改原数组 → 使用反向循环+splice
  • 追求极致性能 → 手动for循环+位运算
相关帖子
远程办公的普及对非全日制用工的形式和管理带来了哪些新的变化?
远程办公的普及对非全日制用工的形式和管理带来了哪些新的变化?
个人消费贷款对账单查询,月度账单下载与查看
个人消费贷款对账单查询,月度账单下载与查看
从报名培训到成功领取补贴,整个流程中有哪些关键注意事项?
从报名培训到成功领取补贴,整个流程中有哪些关键注意事项?
工位摆一支无火扩香算不算芳香疗法,长时间对着电脑的人适合什么香型?
工位摆一支无火扩香算不算芳香疗法,长时间对着电脑的人适合什么香型?
2026年城乡居民基本养老保险的参保范围和条件有哪些具体规定和调整?
2026年城乡居民基本养老保险的参保范围和条件有哪些具体规定和调整?
南充市公司减资代办-企业注册代办公司,专业团队为您服务,价格合理
南充市公司减资代办-企业注册代办公司,专业团队为您服务,价格合理
天津市120长途救护车转运病人,120救护车转运租车
天津市120长途救护车转运病人,120救护车转运租车
别墅房屋抵押贷款申请条件如何准备?申请前准备事项完整清单
别墅房屋抵押贷款申请条件如何准备?申请前准备事项完整清单
许昌市殡葬一条龙价格-丧葬服务公司,殡葬布置
许昌市殡葬一条龙价格-丧葬服务公司,殡葬布置
遵义市定制化网站建设#专业网站建设优化,价格透明
遵义市定制化网站建设#专业网站建设优化,价格透明
衡阳市建筑资质代办|有限责任公司注册,24小时为您服务
衡阳市建筑资质代办|有限责任公司注册,24小时为您服务
扬州市公司经营范围变更-注册公司专业代办,正规代办公司,价格合理
扬州市公司经营范围变更-注册公司专业代办,正规代办公司,价格合理
孝感市殡葬礼仪服务-丧事一站式服务,穿衣抬棺
孝感市殡葬礼仪服务-丧事一站式服务,穿衣抬棺
公司债务优化重组流程二线城市是什么?二线城市流程对比
公司债务优化重组流程二线城市是什么?二线城市流程对比
按揭房抵押贷款申请条件自查,这五大常见拒贷原因要避开
按揭房抵押贷款申请条件自查,这五大常见拒贷原因要避开
2026年,企业为员工提供养老与托育支持性福利可能成为新常态吗?
2026年,企业为员工提供养老与托育支持性福利可能成为新常态吗?
当一次不愉快的外卖异物经历发生后,如何调整心态并重建消费信心?
当一次不愉快的外卖异物经历发生后,如何调整心态并重建消费信心?
宿州市AI数字人制作小视频#专业网站开发制作,多年建站经验
宿州市AI数字人制作小视频#专业网站开发制作,多年建站经验
深圳市食品经营许可证代办公司|注册公司代办服务,经验丰富,快速办理
深圳市食品经营许可证代办公司|注册公司代办服务,经验丰富,快速办理
深圳市病人转运租120救护车,24小时救护车接送
深圳市病人转运租120救护车,24小时救护车接送