ES6的map函数如何跳过全量遍历直接操作指定索引的特定值?
ES6 精准操作数组特定元素实现方案
首先明确:Array.prototype.map 设计为全量遍历数组并返回等长新数组,本身无法跳过遍历,要实现不遍历全量就操作特定元素,不需要用map,可按以下两种场景实现:
场景1:已知外层索引和内层data数组索引(性能最优,无额外遍历)
你已经持有外层rowIndex、内层currIndex的前提下,直接定位元素操作即可:
// 直接修改目标元素的Qty属性 Result[rowIndex].data[currIndex].Qty = 5; // 单独取值也可以直接定位 const targetItem = Result[rowIndex].data[currIndex];
场景2:仅知道目标id不知道索引(匹配到就停止遍历)
如果你只知道目标id为005,没有对应索引的话,用Array.prototype.find实现(匹配到第一个符合条件的元素就终止遍历,不需要走完全部数组):
let targetItem = null; // 遍历外层Result数组 for (const product of Result) { // 在内层data中找id匹配的项 const matchedAttr = product.data.find(attr => attr.id === '005'); if (matchedAttr) { matchedAttr.Qty = 5; targetItem = matchedAttr; // 找到就跳出循环,不需要遍历后续元素 break; } }
提取你需要的最终格式
要得到{data: [id: 005,Qty: 5]}格式的结果,直接从定位到的元素构造即可:
const finalRes = { data: [targetItem] }
原有代码问题说明
- 你之前的实现误用了map方法:单纯遍历修改不需要用map,map必须返回对应元素构造新数组,无返回值的遍历应该用
forEach或者普通循环 - 写法
const list1 = Result.map(e => e.data[currIndex].Qty)[rowIndex];还是会全量遍历Result数组后再取对应索引的值,性能远低于直接按索引定位
内容的提问来源于stack exchange,提问作者New Learner
相关产品推荐
相关产品推荐

