web-dev-qa-db-ja.com

配列によるJavascript 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

どうもありがとう!

5
nadir

Itemが配列ではないため機能しないため、item [index-1] .nameを書き込むことができません。代わりに、fruits [index-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);
    }
});
15
Nehal Gala

ForEachループのコールバック関数は、配列を3番目のパラメーターとして受け入れます。

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));
});
5
kevin ternet

最初と最後のアイテムについては、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);
    });
4
remdevtec
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);
  }
});
2
James