2016-01-11 85 views
1

我在下面顯示的JavaScript中有一個字典樣式的數組對象,並希望通過屬性對它進行排序。這將如何完成?我知道類似的問題已經得到解答,但我認爲我的結構不同。僅僅運行array.sort(compare)不適合我,因爲我沒有索引整數。謝謝!JavaScript按屬性值排序詞典

var myData = { 
    "userOne": { 
     "firstName": "Felix", 

    }, 
    "userTwo": { 
     "firstName": "Bob", 

    }, 
    "userThree": { 
     "firstName": "Anna", 

    } 
} 

我想上述陣列myDatafirstName進行排序,使得具有Anna對象出現第一,其次Bob,隨後Felix。非常感謝!!

+0

沒有這樣的東西「*字典式的數組對象*」 – Amit

+2

你不能 - 對象沒有秩序。 – josh3736

+0

你確定'myData'不應該是一個數組嗎? –

回答

5

您可以使用ES6地圖這是迭代:

var myData = new Map(); 
myData.set('userOne', {'firstName': 'Felix'}); 
myData.set('userTwo', {'firstName': 'Bob'}); 
myData.set('userThree', {'firstName': 'Anna'}); 

function sortByProp(data, prop) { 
    return new Map([...data.entries()].sort((a, b) => a[1][prop] > b[1][prop])); 
}; 

console.log(sortByProp(myData, "firstName")); 
+0

你能解釋一下你在做什麼嗎? – 1252748

+1

當然, 1 。創建一個類似於Object的ES6映射,但也被排序(和更多):https://developer.mozilla.org/en/docs/Web/J avaScript/Reference/Global_Objects/Map 2.將元素插入到地圖中。 3.使用sortByProp函數,該函數將地圖分解爲數組,按屬性名稱對其進行排序並構建新的排序地圖。 我相信記錄[... data.entries()]部分可能會幫助你更好地理解它。 –

2

不幸的是,你的數據格式是不可能的。我們在這裏處理JS對象。根據定義:

對象是Object類型的成員。 它是一個無序的屬性集合,每個屬性都包含原始值,對象或函數。存儲在對象屬性中的函數稱爲方法。

如果您將它作爲對象數組,那可能會有所幫助。

2

下面是一些代碼,將排序基於密鑰解決你的根本問題,通過創建一個數組,而不是一個對象,填充內的對象:

arrayOfSortedObjects = Object.keys(myData).sort(function(a,b) { 
    return myData[a].firstName.localeCompare(myData[b].firstName); 
}).map(function(k) { 
    return myData[k]; 
});