我需要按关键字对JavaScript对象进行排序。
因此如下:
{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }
将变成:
{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }
我需要按关键字对JavaScript对象进行排序。
因此如下:
{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }
将变成:
{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }
当前回答
这里有一个单行解决方案(不是最有效的,但当涉及到像您的示例中那样的瘦对象时,我宁愿使用本机JS函数,也不要使用草率的循环)
const无序={“b”:“asdsad”,“c”:“masdas”,“a”:“dsfdsfsdf”}const ordered=Object.fromEntries(Object.entries(无序).sort())console.log(已订购);//a->b->c
其他回答
这里是一个基于lodash的干净版本,可以处理嵌套对象
/**
* Sort of the keys of an object alphabetically
*/
const sortKeys = function(obj) {
if(_.isArray(obj)) {
return obj.map(sortKeys);
}
if(_.isObject(obj)) {
return _.fromPairs(_.keys(obj).sort().map(key => [key, sortKeys(obj[key])]));
}
return obj;
};
如果lodash有一个toObject()方法,它会更干净。。。
核心版本:
function order(unordered)
{
return _.object(_.sortBy(_.pairs(unordered),function(o){return o[0]}));
}
如果你不信任你的浏览器来保持键的顺序,我强烈建议你依赖一个键值配对数组的有序数组。
_.sortBy(_.pairs(c),function(o){return o[0]})
也许更优雅的形式:
/***按键对键值对象排序,保持键到数据的相关性。*@param{Object}src键值对象*@return{Object}*/var ksort=函数(src){var keys=对象.keys(src),目标={};keys.sort();key.forEach(功能(键){target[key]=src[key];});回归目标;};//用途console.log(ksort({a: 1中,c: 3中,b: 2个}));
P.S.和ES6+语法相同:
function ksort( src ) {
const keys = Object.keys( src );
keys.sort();
return keys.reduce(( target, key ) => {
target[ key ] = src[ key ];
return target;
}, {});
};
JavaScript对象1未排序。试图对它们进行“排序”是没有意义的。如果要迭代对象的财产,可以对键进行排序,然后检索关联的值:
变量myObj={“b”:“asdsadfd”,“c”:“masdasaf”,“a”:“dsfdsfsdf”},键=[],k、 i,len;for(myObj中的k){如果(myObj.hasOwnProperty(k)){按键.按键(k);}}keys.sort();len=按键长度;对于(i=0;i<len;i++){k=键[i];console.log(k+':'+myObj[k]);}
使用Object.keys幻想的替代实现:
变量myObj={“b”:“asdsadfd”,“c”:“masdasaf”,“a”:“dsfdsfsdf”},keys=对象键(myObj),i、 len=按键长度;keys.sort();对于(i=0;i<len;i++){k=键[i];console.log(k+':'+myObj[k]);}
1不要迂腐,但没有JSON对象。
我喜欢上面的这个,只是它不起作用:
/**
* 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;
};
看起来像sorted_obj,没有秩序的保证,因为那张地图似乎更适合,我最终改变了地图的对象,类似这样:
/**
* Return an Object sorted by it's Key
*/
var sortObjectByKey = function(obj){
var keys = [];
let sorted_map = new Map();
for(var key in obj){
if(obj.hasOwnProperty(key)){
keys.push(key);
}
}
// sort keys
keys.sort();
// create new map based on Sorted Keys
keys.forEach(key => {
sorted_map.set(key, obj[key]);
});
return sorted_map;
};