Javascript forEach()通过数组:如何获取上一个和下一个项目?

时间:2016-08-01 10:46:28

标签: javascript arrays loops foreach

假设我们有一系列对象,如:

var fruits = [ {name:"banana", weight:150},{name:"apple", weight:130},{name:"orange", weight:160},{name:"kiwi", weight:80} ]

我想迭代水果并告诉每一次当前,前一个和下一个水果的名称。 我会做类似的事情:

fruits.forEach(function(item,index) {
console.log("Current: " + item.name);
console.log("Previous: " + item[index-1].name);  
console.log("Next: " + item[index-1].name);
});

但显然它不适用于下一个和之前的项目...... 有什么想法吗?

请注意,我不想使用经典的for循环

  

(对于i = 0; i

非常感谢!

4 个答案:

答案 0 :(得分:8)

它不起作用因为item不是数组所以我们不能写item [index-1] .name。相反,我们需要使用水果[index-1]。此外,数组的第一个元素将不具有前一个项目,最后一个元素将不具有下一个项目。 下面的代码段应该适合您。

+-----------------+------------+------------+
|   imei_no       | V_Id      | app_no     | 
+-----------------+------------+------------+
|      7781112889 |       496 | 14,25      |
|     70433357641 |        498 | 125        |
|     70433357641 |        498 | 25         |
|     70433357641 |        498 | 254        |
|     70433357641 |        498 | 16,17,25   |
---------------------------------------------

答案 1 :(得分:4)

对于第一个和最后一个项目,您可以记录END,或者您可以将其设为轮播。

选项1 :标记开头和结尾:

fruits.forEach(function(item,index) {
  console.log("Current: " + item.name);
  console.log("Previous: " + (0 == index)? "START" : fruits[index-1].name);  
  console.log("Next: " + (fruits.length - 1 == index)? "END" : fruits[index+1].name);
});

选项2 :轮播

fruits.forEach(function(item,index) {
      console.log("Current: " + item.name);
      console.log("Previous: " + (0 == index)? fruits[fruits.length - 1].name : fruits[index-1].name);  
      console.log("Next: " + (fruits.length - 1 == index)? fruits[0].name : fruits[index+1].name);
    });

答案 2 :(得分:2)

fruits.forEach(function(item,index) {
  console.log("Current: " + item.name);
  if (index > 0) {
    console.log("Previous: " + fruits[index-1].name);  
  }
  if (index < (fruits.length - 1)) {
    console.log("Next: " + fruits[index+1].name);
  }
});

答案 3 :(得分:1)

ForEach循环中的回调函数接受数组作为第三个参数:

fruits.forEach((item, index, arr) => {
    console.log("Current: " + item.name);
    console.log("Previous: " + ((0 === index)? "START" : arr[index-1].name));
    console.log("Next: " + ((arr.length - 1 === index)? "END" : arr[index+1].name));
});