获取ES6循环的上一项

时间:2019-12-15 22:49:30

标签: javascript

如何获取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)
}

给了我循环的前一个元素。我不确定如何使用新语法

4 个答案:

答案 0 :(得分:3)

您可以将对先前对象的引用保存到单独的变量中。

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;
}

答案 1 :(得分:2)

另一种解决方案是定义一个generator function,该迭代对值对进行迭代,其中每个对都具有该迭代的先前值和当前值。这样做可以让您以合理干净清晰的方式使用for .. of流控制进行迭代。

一种简单的方法如下:

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)
}

希望有帮助!

答案 2 :(得分:1)

如果要使用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);
  }
}

答案 3 :(得分:1)

你不知道。那就是重点。 ES6 for-of循环将索引的概念抽象化了,如果需要简单的循环,则应使用ES6。如果您要基于索引手动访问元素,那么使用简单的for循环就没错。

但是您能做的是这

for(let [idx, elem] of Object.entries(arr)) {
  console.log(arr[idx -1]);
}

但是我建议使用一个简单的for循环。