当前位置: 首页 > 知识库问答 >
问题:

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

彭鹭洋
2023-03-14

假设我们有一组对象,比如:

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

非常感谢!

共有3个答案

齐泰
2023-03-14

对于第一个和最后一个项目,可以记录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);
    });
鲁丰
2023-03-14

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));
});
微生俊材
2023-03-14

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

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);
    if (index > 0) {
        console.log("Previous: " + fruits[index - 1].name);
    }
    if (index < fruits.length - 1) {
        console.log("Next: " + fruits[index + 1].name);
    }
});
 类似资料: