JavaScript中使用array.map时如何访问上一个迭代元素?
如何在Array.map中访问上一个迭代元素
你说得对,Array.map()的默认回调函数里确实没有直接提供上一个元素的参数,但有两种简单的方法可以实现你的需求:
方法1:利用map的索引和原数组参数
map()的回调函数其实接受三个参数:当前元素、当前索引、原数组。我们可以通过索引来获取原数组中的上一个元素:
const originalArray = [{id: 1, name: 'first'}, {id: 2, name: 'second'}, {id: 3, name: 'third'}]; const returnedArrOfObjs = originalArray.map((obj, index, arr) => { // 当不是第一个元素时,从原数组取上一个元素,否则为null const prevObj = index > 0 ? arr[index - 1] : null; return { id: obj.id, name: obj.name, predecessor: prevObj ? prevObj.name : 'none' }; });
这种方法的优点是无外部依赖,属于纯函数式的写法,不会引入额外的状态变量,适合大多数场景。
方法2:用闭包保存上一个元素的值
如果你觉得访问原数组不够直观,可以在map外部定义一个变量,用来保存上一次迭代的元素值,每次迭代后更新这个变量:
const originalArray = [{id: 1, name: 'first'}, {id: 2, name: 'second'}, {id: 3, name: 'third'}]; // 初始值设为第一个元素的predecessor let prevName = 'none'; const returnedArrOfObjs = originalArray.map(obj => { const currentResult = { id: obj.id, name: obj.name, predecessor: prevName }; // 更新prevName为当前元素的name,供下一次迭代使用 prevName = obj.name; return currentResult; });
这种方法更直观,但要注意:这个prevName是外部变量,如果多次调用这段逻辑,需要记得重置它的值,避免残留上一次的状态。
两种方法都能生成你想要的结果,你可以根据自己的代码风格和场景选择~
内容的提问来源于stack exchange,提问作者Edward Watson
相关产品推荐
相关产品推荐

