繁体   English   中英

获取 ES6 循环的上一项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM