当前位置: 首页 > ai >正文

JavaScript中从原数组中删除某个元素

一、删除基本数组中的某元素

1. 删除第一个匹配的元素(修改原数组)

使用 indexOf 找到元素索引,再用 splice 删除:

function removeFirst(arr, value) {const index = arr.indexOf(value);if (index !== -1) {arr.splice(index, 1);}return arr;
}// 示例
let arr = [1, 2, 3, 4, 5];
removeFirst(arr, 3); // arr 变为 [1, 2, 4, 5]

2. 删除所有匹配的元素(修改原数组)

通过反向遍历删除所有匹配项:

function removeAll(arr, value) {for (let i = arr.length - 1; i >= 0; i--) {if (arr[i] === value) {arr.splice(i, 1);}}return arr;
}// 示例
let arr = [1, 2, 3, 3, 4];
removeAll(arr, 3); // arr 变为 [1, 2, 4]

二、删除对象数组中的某元素

1:删除第一个匹配属性值的对象(修改原数组)

通过 findIndex 查找匹配属性的对象索引,再用 splice 删除:

function removeObjectByKey(arr, key, value) {const index = arr.findIndex(item => item[key] === value);if (index !== -1) {arr.splice(index, 1);}return arr;
}// 示例
let users = [{ id: 1, name: "Alice" },{ id: 2, name: "Bob" },{ id: 3, name: "Charlie" }
];
removeObjectByKey(users, 'id', 2); // 删除 id=2 的对象
console.log(users); // [{ id: 1 }, { id: 3 }]

2:删除所有匹配属性值的对象(修改原数组)

反向遍历数组,避免索引错位问题:

function removeAllObjectsByKey(arr, key, value) {for (let i = arr.length - 1; i >= 0; i--) {if (arr[i][key] === value) {arr.splice(i, 1);}}return arr;
}// 示例
let users = [{ role: "admin", name: "Alice" },{ role: "user", name: "Bob" },{ role: "admin", name: "Charlie" }
];
removeAllObjectsByKey(users, 'role', 'admin'); // 删除所有 role=admin 的对象
console.log(users); // [{ role: "user", name: "Bob" }]

3:删除完全相同的对象引用(修改原数组)

如果对象是直接引用,可以用 indexOf 或 includes

const objToRemove = { id: 2 };
let arr = [{ id: 1 },objToRemove, // 直接引用{ id: 3 }
];const index = arr.indexOf(objToRemove);
if (index !== -1) {arr.splice(index, 1);
}console.log(arr); // [{ id: 1 }, { id: 3 }]

注意事项:

  1. 引用比较 vs 值比较
    如果对象是动态生成的(如 { id: 2 }),直接比较引用会失败,必须通过属性值判断。

    javascript

    复制

    下载

    // 以下代码不会删除任何对象,因为新对象 { id: 2 } 与原对象引用不同!
    arr.splice(arr.indexOf({ id: 2 }), 1);
  2. 深拷贝问题
    如果对象包含嵌套结构(如数组、子对象),需确保比较逻辑覆盖所有需要判断的属性。

  3. 性能优化
    如果数组很大,反向遍历(for (let i = arr.length - 1; ...) 比正向遍历更高效,因为 splice 会改变数组长度。

http://www.xdnf.cn/news/8072.html

相关文章:

  • 用对称化与chaining技术bound经验过程上确界的期望(Guntuboyina理论统计学笔记)
  • Python打卡训练营day29-类的装饰器
  • 深入学习和对比Python 列表与元组
  • 测量尺子:多功能测量工具,科技改变生活
  • PP-YOLOE-SOD学习笔记1
  • ThreadLocal线程本地变量在dubbo服务使用时候遇到的一个坑
  • Docker Compose`down`和`stop`命令的区别
  • 【RocketMQ 生产者和消费者】- 生产者启动源码-上报生产者和消费者心跳信息到 broker(3)
  • Modelsim的入门使用和Verilog编写
  • 【电流探头】LOTO电流探头线性度测量
  • Docker-mongodb
  • JavaWeb Web基础
  • 零碳办会新范式!第十届国际贸易发展论坛——生物能源和可持续发展专场,在京举办
  • 前端性能优化方案
  • 亚马逊英国站海关新规深度解读与合规指南
  • 中级统计师-统计学基础知识-第六章 回归分析
  • 快速部起一个Openwhisk平台,使用telego k8s服务部署能力内网部署
  • 中小制造企业网络安全防护指南
  • Linux Docker下安装tomcat
  • Spring3+Vue3项目中的知识点——跨域与解决方案
  • Gartner《如果有效评估Generative AI项目的投资回报》学习心得
  • DeepSeek快速搭建个人网页
  • vue3基本介绍
  • 220V转1.25V-12V输出电路Multisim仿真
  • 【设计模式】责任链+模板+工程模式使用模板
  • indicator-sysmonitor 在Ubuntu 右上角实时显示CPU/MEM/NET的利用率
  • C#对集合进行分组IGroupingout TKey, out TElement>
  • 01. Qt介绍及Qt开发环境搭建(2025.05最新官网下载方式)
  • C++初阶-list的使用2
  • AI编程: OpenAI Codex vs Google Jules vs GitHub Copilot++