我须要按键对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' ] ]