web-dev-qa-db-ja.com

JavaScript foreachループ、for..inとangular forEachループの違い。

angularフレームワークに新しい。私は角度でjsonオブジェクトを繰り返したいとき、javascript foreachfor..inループを使用しました。

後で私はangular自体にオブジェクトを繰り返すangular.forEachループがあることを知った。

angular.forEachのパフォーマンスとjavascript for..inおよびforeachループのパフォーマンスを比較するにはどうすればよいですか?

Javascript foreachおよびangular.forEachの代わりにfor..inを使用する必要があるのはなぜですか?

パフォーマンスを示すいくつかの例と使用理由を教えてください。

ありがとう:)

21

Angular forEach-オブジェクトまたは配列のいずれかであるobjコレクションの各アイテムに対してイテレータ関数を1回呼び出します。

var values = {name: 'misko', gender: 'male'};
angular.forEach(values, function(value, key) {
  console.log(key + ': ' + value);
});

// Output:
// "name: misko"
// "gender: male"

for..in-オブジェクトのenumerable propertiesを任意の順序で繰り返します。個別のプロパティごとに、ステートメントを実行できます。

var obj = {a:1, b:2, c:3};

for (var prop in obj) {
  console.log("obj." + prop + " = " + obj[prop]);
}

// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"

forEach-メソッドは、提供された関数を配列要素ごとに1回実行します。

// Notice that index 2 is skipped since there is no item at
// that position in the array.
[2, 5, , 9].forEach(function (element, index, array) {
  console.log('a[' + index + '] = ' + element);
});
// logs:
// a[0] = 2
// a[1] = 5
// a[3] = 9

パフォーマンスの観点からは、使用しているデータ構造に依存します。Arrayの場合、Angular.forEach or native forEachを使用することをお勧めします。Objectfor..inの場合、最善ですが、Angular.forEachもオブジェクトをうまく処理しているようです。使用するデータの量に応じて。巨大な場合は、Lodash or Underscoreのようなライブラリを使用することをお勧めします。それらはデータ操作をうまく処理します。

20
akinjide

angular.forEach は基本的にポリフィルです。

したがって、angularを使用している場合、angularは必要に応じて代替を提供するため、ブラウザが古いかどうかは関係ありません。

コードでは、次のようになります。

if (!Array.prototype.forEach) {
    Array.prototype.forEach = function(...) {
        // angulars own implementation
    }
}

他にもいくつかの違いがあります。

  • angular.forEachは、オブジェクトの繰り返しをサポートしています。
  • angular.forEachは、オブジェクト/配列を最初の引数として受け取ります。
9
chriskelly