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

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年城乡居民基本养老保险的参保范围和条件有哪些具体规定和调整?
2026年,固态电池技术发展到哪一步了,距离大规模装车还有多远?
2026年,固态电池技术发展到哪一步了,距离大规模装车还有多远?
阳江市模版网站开发|AI数字人制作短视频,高端网站开发设计
阳江市模版网站开发|AI数字人制作短视频,高端网站开发设计
温州市个体工商户注销代办电话-网络公司注册,无需本人到场,专业代办
温州市个体工商户注销代办电话-网络公司注册,无需本人到场,专业代办
镇江市活动赛事保障救护车租赁,救护车租车转运病人
镇江市活动赛事保障救护车租赁,救护车租车转运病人
汕头市网站SEO优化#网站建设推广服务公司,一站式服务
汕头市网站SEO优化#网站建设推广服务公司,一站式服务
淮安市公司注销费用|中小企业注册,专业一站式服务
淮安市公司注销费用|中小企业注册,专业一站式服务
如何初步判断我们社区安装的灭蚊灯是否在正常工作并发挥了作用?
如何初步判断我们社区安装的灭蚊灯是否在正常工作并发挥了作用?
过桥垫资流程中的贷后管理,风险预警与处置流程
过桥垫资流程中的贷后管理,风险预警与处置流程
兰州市转院救护车出租护送病人回家,长途120救护车护送,就近派车
兰州市转院救护车出租护送病人回家,长途120救护车护送,就近派车
为家中不会操作手机的老人办理异地就医备案,具体应该如何操作?
为家中不会操作手机的老人办理异地就医备案,具体应该如何操作?
从技术原理上讲,电子身份证的“网证”是如何实现防伪和验证的?
从技术原理上讲,电子身份证的“网证”是如何实现防伪和验证的?
青岛市食品经营许可证代办公司-工商注册公司,无需本人到场,专业代办
青岛市食品经营许可证代办公司-工商注册公司,无需本人到场,专业代办
申请按揭房抵押贷款流水要打多久?银行认定的有效流水解析
申请按揭房抵押贷款流水要打多久?银行认定的有效流水解析
衡阳市品牌网站建设|手机网站建设,企业解决方案
衡阳市品牌网站建设|手机网站建设,企业解决方案
扬州市苹果app开发#品牌网站建设,服务可靠
扬州市苹果app开发#品牌网站建设,服务可靠