ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の循環順序付きコレクションで配列が好まれるのはなぜですか?

JavaScript の循環順序付きコレクションで配列が好まれるのはなぜですか?

伊谢尔伦
伊谢尔伦オリジナル
2018-05-16 17:15:462281ブラウズ

順序付けられたコレクションを表すには、オブジェクト型の代わりに配列を使用することを推奨します

ECMAScript 標準では、JavaScript のオブジェクト型のプロパティの格納順序を指定していません。

ただし、for..in ループを使用して Object のプロパティを走査する場合は、特定の順序に依存する必要があります。 ECMAScript はこのシーケンスを明示的に標準化していないため、各 JavaScript 実行エンジンは独自の特性に従って実装される可能性があり、異なる実行環境での for..in ループの動作の一貫性は保証できません。

たとえば、report メソッドを呼び出したときの次のコードの結果は不確実です:

function report(highScores) { 
  var result = ""; 
  var i = 1; 
  for (var name in highScores) { // unpredictable order 
    result += i + ". " + name + ": " + 
    highScores[name] + "\n"; 
    i++; 
  } 
  return result; 
} 
report([{ name: "Hank", points: 1110100 }, 
{ name: "Steve", points: 1064500 }, 
{ name: "Billy", points: 1050200 }]); 
// ?

実行結果がデータの順序に基づいていることを本当に確認する必要がある場合は、データを表すために配列型を使用することを優先してください。オブジェクト型を直接使用するのではなく。同時に、for..in ループの使用を避け、明示的な for ループを使用するようにしてください:

function report(highScores) { 
  var result = ""; 
  for (var i = 0, n = highScores.length; i < n; i++) { 
    var score = highScores[i]; 
    result += (i + 1) + ". " + 
    score.name + ": " + score.points + "\n"; 
  } 
  return result; 
} 
report([{ name: "Hank", points: 1110100 }, 
{ name: "Steve", points: 1064500 }, 
{ name: "Billy", points: 1050200 }]); 
// "1. Hank: 1110100 2. Steve: 1064500 3. Billy: 1050200\n"

特に順序に依存するもう 1 つの動作は、浮動小数点数の計算です:

var ratings = { 
  "Good Will Hunting": 0.8, 
  "Mystic River": 0.7, 
  "21": 0.6, 
  "Doubt": 0.9 
};

項目 2 では、浮動小数点数について説明しました。小数点数の加算演算は交換法則さえ満たせません:
(0.1 + 0.2) + 0.3 の結果と 0.1 + (0.2 + 0.3) の結果はそれぞれ
0.600000000000001 と 0.6

したがって、浮動小数点数の算術演算の場合任意のものは使用できません。順序:

var total = 0, count = 0; 
for (var key in ratings) { // unpredictable order 
  total += ratings[key]; 
  count++; 
} 
total /= count; 
total; // ?

for..in の走査順序が異なると、得られる最終的な合計結果も異なります。以下は 2 つの計算順序とそれに対応する結果です:

(0.8 + 0.7 + 0.6 +0.9) / 4 // 0.75
(0.6 + 0.8 + 0.7 +0.9) / 4 // 0.7499999999999999

Of。もちろん、浮動小数点数の場合 この種の計算問題に対する 1 つの解決策は、それを表すために整数を使用することです。たとえば、最初に上記の浮動小数点数を 10 倍に拡大して整数データにし、計算が完了した後にそれを 10 倍に縮小します。 :

りー

以上がJavaScript の循環順序付きコレクションで配列が好まれるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。