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

js 两个数组中的指定参数(id)相同,为某个对象设置disabled属性

在JavaScript中,如果想要比较两个数组并根据它们的id属性来设置某个对象的disabled属性为true,你可以使用几种不同的方法。这里我将介绍几种常用的方法:

方法1:使用循环和条件判断

const array1 = [{ id: 1, name: 'Item 1' },{ id: 2, name: 'Item 2' },{ id: 3, name: 'Item 3' }
];const array2 = [{ id: 2, name: 'Item 2' },{ id: 4, name: 'Item 4' }
];// 遍历array1,检查id是否存在于array2中
array1.forEach(item1 => {const found = array2.some(item2 => item2.id === item1.id);if (found) {item1.disabled = true;}
});console.log(array1);

方法2:使用Map或Set提高效率

如果需要多次进行这样的比较,使用Map或Set可以提高效率。

const array1 = [{ id: 1, name: 'Item 1' },{ id: 2, name: 'Item 2' },{ id: 3, name: 'Item 3' }
];const array2 = [{ id: 2, name: 'Item 2' },{ id: 4, name: 'Item 4' }
];// 将array2的id存储到Set中,以便快速查找
const idsSet = new Set(array2.map(item => item.id));array1.forEach(item => {if (idsSet.has(item.id)) {item.disabled = true;}
});console.log(array1);

方法3:使用findIndex提高可读性 

如果想要一个更简洁的解决方案,可以使用findIndex,虽然它在性能上可能不如someSet,但在某些情况下代码更易读。

const array1 = [{ id: 1, name: 'Item 1' },{ id: 2, name: 'Item 2' },{ id: 3, name: 'Item 3' }
];const array2 = [{ id: 2, name: 'Item 2' },{ id: 4, name: 'Item 4' }
];array1.forEach(item => {if (array2.findIndex(item2 => item2.id === item.id) !== -1) {item.disabled = true;}
});console.log(array1);

方法4:使用filter和map组合(如果只需要标记)

如果只是想标记哪些对象存在于另一个数组中,而不直接修改原数组,可以使用filtermap

const array1 = [...array1]; // 复制原数组以避免修改原数组,除非你愿意这样做。
const markedArray = array1.map(item => {if (array2.some(item2 => item2.id === item.id)) {return { ...item, disabled: true }; // 使用扩展运算符创建新对象以避免直接修改原对象。} else {return item; // 不修改原对象。}
});
console.log(markedArray); // 这将显示带有disabled属性的新数组。

选择哪种方法取决于具体业务需求和性能考虑。对于大多数实际应用场景,使用SetMap的方法通常是最快和最清晰的。特此记录一下~

http://www.dtcms.com/a/181385.html

相关文章:

  • ROS导航局部路径规划算法
  • “点对点通信(Point-to-Point)”和“端对端通信(End-to-End)”
  • LearnOpenGL01:创建项目
  • 从逻辑学视角理解统计学在数据挖掘中的作用
  • rust-candle学习笔记10-使用Embedding
  • QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。
  • 请求从发送到页面渲染的全过程
  • vscode 配置doxygen注释和snippet
  • 大模型备案环节如何评估模型的安全性
  • 简易版无人机飞控
  • C++ Dll创建与调用 查看dll函数 MFC 单对话框应用程序(EXE 工程)改为 DLL 工程
  • Spring Boot快速开发:从零开始搭建一个企业级应用
  • 《工业计算机硬件技术支持手册》适用于哪些人群?
  • STM32GPIO输入实战-key按键easy_button库移植
  • ES6新增Set、Map两种数据结构、WeakMap、WeakSet举例说明详细。(含DeepSeek讲解)
  • Qt开发经验 --- 避坑指南(10)
  • 使用Java实现HTTP协议服务:从自定义服务器到内置工具
  • MySQL 8.0(主从复制)
  • 如何删除豆包本地大模型
  • 操纵杆支架加工工艺及钻3φ11孔夹具设计
  • L48.【LeetCode题解】904. 水果成篮
  • 《P1177 【模板】排序》
  • 高质量老年生活:从主动健康管理到预防医学的社会价值
  • 一种安全不泄漏、高效、免费的自动化脚本平台
  • C++学习-入门到精通-【5】类模板array和vector、异常捕获
  • CMA认证对象?CMA评审依据,CMA认证好处
  • PPI-ID: 德克萨斯大学研究团队最新款蛋白-蛋白互作(PPI)预测工具上线
  • Java中医门诊系统源码 中医诊所系统源码
  • Ascend的aclgraph(2)_npu_backend中还有些什么秘密?
  • 数据类型详解(布尔值、整型、浮点型、字符串等)-《Go语言实战指南》