2017-03-04 3 views
0

チームのリストを含むJSONオブジェクトがあり、各チームにはキー値のペアのオブジェクトであるteamCrimeCategorySumがあります。犯罪カテゴリであり、各値はそのカテゴリの犯罪の総数です。これは、アルファベット順に配置されており、このようになりますされています...Javascript ES6 - 新しい配列を生成するためにオブジェクトをマッピングすると、オブジェクト内の要素の順序が失われる

alcohol:0 
animal abuse:0 
animal cruelty:0 
animal neglect:0 
assault:7 
attempted murder:0 
battery:1 

私はそうのようなだけの値の配列を取得することをループしています...

teamList.map(team => { 
    const newArray = Object.keys(team['teamCrimeCategorySum']).map(key => { 
    return team['teamCrimeCategorySum'][key] 
    }) 
}) 

これは、配列を生成します元の注文は失われます。上記の目的は、これを生産している...私は順序を保持したい

[18, 6, 1, 1, 7, 2, 3, ...] 

は、上記の目的ではなく、生成しなければならないような...

[0, 0, 0, 0, 7, 0, 1, ...] 
+3

オブジェクトのプロパティには順序がありません。あなたは 'Object.keys(o).sort(fn).map'を呼び出すことができます – rlemon

+0

それを解決しました!ありがとうございました!私はそれがコンソールに記録されたときにはアルファベット順に表示されたような秩序がなかったことを認識しませんでした。 –

答えて

0

@rlemonは正しい考えを持っていました。コンソールでオブジェクトを検査していたとき、アルファベット順に記録されましたが、オブジェクト属性はアルファベット順に格納されませんでした。 .sort()を呼び出すことによって、.map()の前に、私が意図したアルファベット順を確立して保持することができました。この関数は、今あなたがObject.keysと配列を使用したい場合は、オブジェクト

const newArray = []; 
    for (let key in tempList) { 
     if(tempList.hasOwnProperty(key)) { 
       newArray.push(tempList[key]); 
     } 
    } 

または静止から元の順序を保持配列を生成するコードの下に使用することができます

teamList.map(team => { 
    const newArray = Object.keys(team['teamCrimeCategorySum']) 
     .sort() 
     .map(key => { 
     return team['teamCrimeCategorySum'][key] 
     }) 
    return [`${team.name}`, ...newArray, ''] 
    }) 
1

...このようになります最初にキーをソートしてから、次のように呼び出します。

Object.keys(tempList).sort().map(...) 
関連する問題