293

配列に含まれるオブジェクトを循環し、それぞれのプロパティを変更したいと考えています。私がこれを行う場合:

for (var j = 0; j < myArray.length; j++){

console.log(myArray[j]);

}

コンソールは配列内のすべてのオブジェクトを表示するはずですよね? しかし、実際には最初のオブジェクトしか表示されません。ループの外で配列をコンソールログに記録すると、すべてのオブジェクトが表示されるので、そこには間違いなくもっと多くのオブジェクトがあります。

ともあれ、次の問題です。ループを使用して、たとえば配列内の Object1.x にアクセスするにはどうすればよいですか?

for (var j = 0; j < myArray.length; j++){

console.log(myArray[j.x]);

}

これは「未定義」を返します。繰り返しますが、ループの外側のコンソール ログは、すべてのオブジェクトに "x" の値があることを示しています。ループ内でこれらのプロパティにアクセスするにはどうすればよいですか?

プロパティごとに個別の配列を使用するように他の場所で推奨されましたが、最初にこの方法を使い果たしたことを確認したいと思います。

ありがとうございました!

4

17 に答える 17

78

for..of ループを使用して、オブジェクトの配列をループできます。

for (let item of items) {
    console.log(item); // Will display contents of the object inside the array
}

ループの最も優れた点の 1 つは、for..of配列だけでなく反復できることです。マップやオブジェクトを含む、あらゆるタイプの iterable を反復処理できます。古いブラウザーをサポートする必要がある場合は、トランスパイラーまたは TypeScript などを使用してください。

マップを反復処理する場合、構文はキーと値の両方を処理することを除いて、上記とほとんど同じです。

for (const [key, value] of items) {
  console.log(value);
}

for..of私は Javascript で行うほとんどすべての種類の繰り返しにループを使用します。さらに、最もクールなことの 1 つは、async/await でも機能することです。

于 2015-06-29T02:11:28.490 に答える
18

これを行う方法の例を次に示します:)

var students = [{
    name: "Mike",
    track: "track-a",
    achievements: 23,
    points: 400,
  },
  {
    name: "james",
    track: "track-a",
    achievements: 2,
    points: 21,
  },
]

students.forEach(myFunction);

function myFunction(item, index) {
  for (var key in item) {
    console.log(item[key])
  }
}

于 2016-09-05T10:32:49.407 に答える
9

オブジェクトの配列をループすることは、非常に基本的な機能です。これは私にとってうまくいくものです。

var person = [];
person[0] = {
  firstName: "John",
  lastName: "Doe",
  age: 60
};

var i, item;

for (i = 0; i < person.length; i++) {
  for (item in person[i]) {
    document.write(item + ": " + person[i][item] + "<br>");
  }
}

于 2016-05-15T04:39:53.847 に答える
5

これはうまくいくでしょう。array(yourArray) をループします。次に、各オブジェクト (eachObj) の直接プロパティをループします。

yourArray.forEach( function (eachObj){
    for (var key in eachObj) {
        if (eachObj.hasOwnProperty(key)){
           console.log(key,eachObj[key]);
        }
    }
});
于 2016-12-26T11:13:52.463 に答える
4

オブジェクトの配列を繰り返し処理する別の方法を次に示します (これらのドキュメントには jQuery ライブラリを含める必要があります)。

$.each(array, function(element) {
  // do some operations with each element... 
});
于 2016-03-21T06:22:31.933 に答える
0

これは誰かを助けるかもしれません。多分それはノードのバグです。

var arr = [ { name: 'a' }, { name: 'b' }, { name: 'c' } ];
var c = 0;

これは機能しません:

while (arr[c].name) { c++; } // TypeError: Cannot read property 'name' of undefined

しかし、これは機能します...

while (arr[c]) { c++; } // Inside the loop arr[c].name works as expected.

これも効く…

while ((arr[c]) && (arr[c].name)) { c++; }

しかし、単に順序を逆にするだけでは機能しません。ここには、ノードを壊す何らかの内部最適化があると思います。

while ((arr[c].name) && (arr[c])) { c++; }

エラーは配列が未定義であることを示していますが、そうではありません:-/ Node v11.15.0

于 2020-04-21T00:37:18.293 に答える