2017-04-05 93 views
1

我試圖遍歷for循環來對數組進行5次排序。For循環將所有對象值設置爲最後一個實例

let sortedCities = {}; 
for (let i = 0; i < 5; i++) { 
    sortedCities[i] = darkSkyHelper.sortCities(info,unsortedCities,i); 
    console.log(sortedCities[i]); 
} 
console.log(sortedCities); 

static sortCities(info, cities, day) { 
    let sortedCities = cities.sort(function(a,b) { 
     return info[b].daily.data[day].precipProbability - info[a].daily.data[day].precipProbability; 
    }) 
    return sortedCities; 
    } 

第一的console.log顯示每個循環中的期望的輸出,而第二顯示器與每個對象值等於從環路

["cin", "cle", "col", "nya", "laa", "was", "tex"] 
["was", "nya", "cle", "cin", "col", "laa", "tex"] 
["cle", "cin", "was", "nya", "laa", "col", "tex"] 
["laa", "col", "cle", "cin", "was", "nya", "tex"] 
["col", "tex", "cle", "laa", "cin", "was", "nya"] 

Object {..} 
0: Array[7] 
0: "col" 
1: "tex" 
2: "cle" 
3: "laa" 
4: "cin" 
5: "was" 
6: "nya" 
length: 7 
__proto__: Array[0] 
1: Array[7] 
0: "col" 
1: "tex" 
2: "cle" 
3: "laa" 
4: "cin" 
5: "was" 
6: "nya" 
... 
+0

你有五個陣列,而是通過一個在你的代碼('this.state.days'),你只循環。如果您需要更多幫助,請加入[mcve]。 –

+1

聽起來像'darkSkyHelper.sortCities'每次都會對同一個數組返回一個引用,只是按不同方式排序。因此'sortedCities'中的每個元素都是相同的數組。 –

+0

請參閱[如何排序數組而不改變原始數組]?(http://stackoverflow.com/questions/9592740/how-can-you-sort-an-array-without-mutating-the-original-array ) – JJJ

回答

1

每次調用時的最後一個運行的輸出的對象sortCities你正在返回對同一個數組的引用,只是按不同的順序排序。你需要每次創建一個新的數組。有幾種方法可以做到這一點,包括slice

static sortCities(info, cities, day) { 
    let sortedCities = cities.sort(function(a,b) { 
     return info[b].daily.data[day].precipProbability - info[a].daily.data[day].precipProbability; 
    }) 
    return sortedCities.slice(0); 
} 
+1

可能會更清晰地對原始數組的副本進行排序,而不是對原始數據進行排序(然後對其進行變更),然後返回副本。此外,新變量是不必要的。 – JJJ

+1

@JJJ - 也許。這將是'returns cities.slice()。sort(...)'。 OP可以以任何適合他們風格的方式實施。 –

+0

謝謝你們的幫助! –

相關問題