2017-01-17 6 views
0

以下は私のコードです。私は、データを適切に並べ替えるのにUTCのタイムスタンプを使用していますが、ソートされた後のローカルタイムに変換したい(最後の2つのコメント行が行います)。しかし、私が並べ替える前に変換した場合、結果は正しくありません。関数の外に変換しようとすると、b.Timestampへのコンテキストはありません。javascriptループ外の変数へのアクセス

var myArray = []; 

data.Items.forEach(function(b) { 
    myArray.push(b.Timestamp + "text" + b.payload.value); 
}); 

myArray.sort(); 

//var date = new Date(b.Timestamp + 'UTC'); 
//date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)" 
+0

ようこそスタックオーバーフロー。いつでも[About]と[Ask]ページをお読みください。あなたはおそらくこれをホスト言語でタグ付けするべきです - JavaScriptであると思われますが、間違っている可能性があります。現在のタグよりも関連性の高い専門知識を持つ人の前で質問を受け取ります。 [tag:local]を削除してください。時間に無関係な目的を持っています。配列を使用しているため、[tag:arrays]はすべて重要であることは明らかではありません。 –

+0

ソートされた配列に対して別のループを使用しないで、配列の値に変換を適用しますか? –

+0

こんにちはジョナサン - 私はあなたが正しいと信じていますが、私は仕事に苦労しています。元のループの外側でb.Timestampにアクセスする方法がわかりません。 bへの文脈はない。 –

答えて

0

元の配列をソートしてから変換する必要があります。これを行うには、カスタム比較関数を.sort()に渡します。ここにチェーン実装があります:

// Get a string sort key for an item 
function sortKey(item) { 
    return item.Timestamp + item.payload.value; 
} 

var myArray = data.Items 
    // Copy the array to avoid modifying the original 
    .slice() 
    // Sort using custom logic 
    .sort(function(a, b) { 
     return sortKey(a) > sortKey(b) ? 1 : -1; 
    }) 
    // Use map to transform 
    .map(function(b) { 
     return Date(b.Timestamp + 'UTC'); 
    }); 
関連する問題