[英]Get previous item of ES6 loop
如何获取 ES6 循环的前一个元素。
例如,如果我的 for 循环是这样写的:
for (let item of data){
console.log(item.name)
}
我还想获取循环上一项的名称:
我试过:
data[item-1].name
这不起作用。
当我使用 ES5 数组时
for(let i =0;i<details.length;i++){
console.log(details[i-1].PartNumber)
}
给了我循环的前一个元素。 我不确定如何使用新语法来做到这一点
您可以将上一个对象的引用保存到一个单独的变量中。
let data = [{name: 'name1'}, {name: 'name2'}, {name: 'name3'}, {name: 'name4'}, {name: 'name5'}]; let prev; for (let item of data){ console.log({current: item.name, previous: prev && prev.name}) prev = item; }
另一种解决方案是定义一个生成器函数,该函数迭代成对的值,其中每个配对都具有该迭代的先前值和当前值。 这样做将允许您以相当干净和清晰的方式使用for .. of
flow control 进行迭代。
一个简单的方法如下:
const data = [1,2,3,4]; /* Define generator function which returns a pair of previous/current values from input iteratable, per iteration */ function *iteratePairs(iteratable) { let prev; for(const item of iteratable) { // Return the pair for this iteration yield [prev, item] // Update the previous item prev = item; } } // Invoke the iteratePairs generator using for..of // flow control for (let pair of iteratePairs(data)){ console.log(pair) }
希望有帮助!
如果你想使用for..of
并访问上一个索引,首先在数组上调用.entries()
,这样你就可以得到键和值,然后你可以使用括号表示法查找i - 1
属性:
for (const [i, value] of data.entries()){
if (i >= 1) {
console.log(data[i - 1].PartNumber);
}
}
const data = [ { PartNumber: 0 }, { PartNumber: 1 }, { PartNumber: 2 }, ] for (const [i, value] of data.entries()){ if (i >= 1) { console.log(data[i - 1].PartNumber); } }
你没有。 这就是重点。 ES6 for-of 循环抽象了索引的概念,如果你想要一个简单的循环,应该使用它。 如果您想根据索引手动访问元素,使用简单的for
循环没有任何问题。
但是你可以做的是:
for(let [idx, elem] of Object.entries(arr)) {
console.log(arr[idx -1]);
}
但我建议使用简单的for
循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.