2017-05-12 4 views
0

私は本来、for-loopを使ってオブジェクトのキー(年)を作成しています。 しかし、オブジェクトの最初のキーは手動で作成したinitialキーになります。forループと手動でのオブジェクトキーの作成

しかし、最後まで最後までプッシュされてしまいます。

私は次のコードを持っている:

const VEHICLE_YEARS =() => { 
    const vehicleYears = {} 
    vehicleYears['initial'] = 'Choose One' 
    const startYear = 2013 
    const endYear = new Date().getFullYear() 
    for (let year = startYear; year <= endYear; year++) { 
     vehicleYears[year] = year 
    } 

    return vehicleYears 
} 
VEHICLE_YEARS() 

を、それはこのように、最大​​送信:

{ 
    '2013': 2013, 
    '2014': 2014, 
    '2015': 2015, 
    '2016': 2016, 
    '2017': 2017, 
    initial: 'Select One' 
} 
+1

操作するものはオブジェクトであり、配列ではありません。最初にキーをソートし、それを反復することができます。 – wannadream

+0

マップまたは配列を使用する必要があります。 http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – Bebigu

+0

マップを使用することもできます(配列を使用することもできます)。私は答えを出した –

答えて

1

シンプルオブジェクトは、あなたが望むものを提供していません。あなたはMapが必要です。

あなたはこの必要があります。

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

// the result 
initial Select one 
2013 2013 
2014 2014 
2015 2015 
2016 2016 
2017 2017 

あなたががあなたが追加としてご注文にthroughtエントリをITERになることguarantiedさfor ofでマップ反復する場合:for..ofを使用することができます反復する

const map = new Map(); 
map.set('initial', 'Select one'); 
map.set('2013', '2013'); 
map.set('2014', '2014'); 
map.set('2015', '2015'); 
map.set('2016', '2016'); 
map.set('2017', '2017'); 
// etc 

をそれらをマップに追加します。ドキュメントから:

A地図オブジェクトは、オーダーでその要素を反復処理 - ... FORループの各反復のために、[キー値]の配列を返します。

また、エントリを反復するには、Map.prototype.forEachが必要です。

map.forEach((val, key) => console.log(key ,val)) 
関連する問題