我須要按鍵對JavaScript對象進行排序。 數組
所以,如下內容: oop
{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }
會成爲: ui
{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }
這對我有用 this
/** * Return an Object sorted by it's Key */ var sortObjectByKey = function(obj){ var keys = []; var sorted_obj = {}; for(var key in obj){ if(obj.hasOwnProperty(key)){ keys.push(key); } } // sort keys keys.sort(); // create new array based on Sorted Keys jQuery.each(keys, function(i, key){ sorted_obj[key] = obj[key]; }); return sorted_obj; };
使用lodash能夠正常工做: spa
some_map = { 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' } // perform a function in order of ascending key _(some_map).keys().sort().each(function (key) { var value = some_map[key]; // do something }); // or alternatively to build a sorted list sorted_list = _(some_map).keys().sort().map(function (key) { var value = some_map[key]; // return something that shall become an item in the sorted list }).value();
值得深思。 調試
假設它在顯示無序對象屬性的VisualStudio調試器中頗有用。 code
(function(s){var t={};Object.keys(s).sort().forEach(function(k){t[k]=s[k]});return t})({b:2,a:1,c:3})
若是您有嵌套的對象或嵌套的數組obj,請使用此代碼。 orm
var sortObjectByKey = function(obj){ var keys = []; var sorted_obj = {}; for(var key in obj){ if(obj.hasOwnProperty(key)){ keys.push(key); } } // sort keys keys.sort(); // create new array based on Sorted Keys jQuery.each(keys, function(i, key){ var val = obj[key]; if(val instanceof Array){ //do for loop; var arr = []; jQuery.each(val,function(){ arr.push(sortObjectByKey(this)); }); val = arr; }else if(val instanceof Object){ val = sortObjectByKey(val) } sorted_obj[key] = val; }); return sorted_obj; };
如前所述,對象是無序的。 對象
然而... 排序
您可能會發現如下成語頗有用:
var o = { 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }; var kv = []; for (var k in o) { kv.push([k, o[k]]); } kv.sort()
而後,您能夠遍歷kv並作您想作的任何事情。
> kv.sort() [ [ 'a', 'dsfdsfsdf' ], [ 'b', 'asdsad' ], [ 'c', 'masdas' ] ]