如果我有一个JavaScript对象,如:
var list = {
"you": 100,
"me": 75,
"foo": 116,
"bar": 15
};
是否有一种方法可以根据值对属性进行排序?最后得到
list = {
"bar": 15,
"me": 75,
"you": 100,
"foo": 116
};
如果我有一个JavaScript对象,如:
var list = {
"you": 100,
"me": 75,
"foo": 116,
"bar": 15
};
是否有一种方法可以根据值对属性进行排序?最后得到
list = {
"bar": 15,
"me": 75,
"you": 100,
"foo": 116
};
当前回答
<pre>
function sortObjectByVal(obj){
var keysSorted = Object.keys(obj).sort(function(a,b){return obj[b]-obj[a]});
var newObj = {};
for(var x of keysSorted){
newObj[x] = obj[x];
}
return newObj;
}
var list = {"you": 100, "me": 75, "foo": 116, "bar": 15};
console.log(sortObjectByVal(list));
</pre>
其他回答
这里还有一个例子:
函数sortObject(obj) { Var arr = []; var支撑; For (prop in obj) { if (obj.hasOwnProperty(prop)) { arr.push ({ “关键”:道具, “价值”:obj(道具) }); } } 加勒比海盗。排序(函数(a, b) { 返回a.value - b.value; }); 返回arr;//返回数组 } Var列表= { 车:300, 自行车:60岁 摩托车:200, 飞机:1000, 直升机:400, 火箭:8 * 60 * 60 }; var arr = sortObject(list); console.log (arr);
a = { b: 1, p: 8, c: 2, g: 1 }
Object.keys(a)
.sort((c,b) => {
return a[b]-a[c]
})
.reduce((acc, cur) => {
let o = {}
o[cur] = a[cur]
acc.push(o)
return acc
} , [])
输出= [{p: 8}, {c: 2}, {b: 1}, {g: 1}]
ECMAScript 2017引入了Object。values / Object.entries。顾名思义,前者将一个对象的所有值聚合到一个数组中,后者将整个对象聚合到一个[key, value]数组数组中;Python等价于dict.values()和dict.items()。
这些特性使得将任何散列排序到有序对象中变得非常容易。到目前为止,只有一小部分JavaScript平台支持它们,但您可以在Firefox 47+上尝试一下。
编辑:现在所有现代浏览器都支持!
let obj = {"you": 100, "me": 75, "foo": 116, "bar": 15};
let entries = Object.entries(obj);
// [["you",100],["me",75],["foo",116],["bar",15]]
let sorted = entries.sort((a, b) => a[1] - b[1]);
// [["bar",15],["me",75],["you",100],["foo",116]]
JavaScript对象根据定义是无序的(参见ECMAScript语言) 规范,第8.6节)。语言规范甚至不能保证,如果你连续迭代一个对象的属性两次,第二次它们会以相同的顺序出现。
如果你需要对事物进行排序,可以使用数组和array .prototype.sort方法。
var list = {
"you": 100,
"me": 75,
"foo": 116,
"bar": 15
};
var tmpList = {};
while (Object.keys(list).length) {
var key = Object.keys(list).reduce((a, b) => list[a] > list[b] ? a : b);
tmpList[key] = list[key];
delete list[key];
}
list = tmpList;
console.log(list); // { foo: 116, you: 100, me: 75, bar: 15 }