如果我有一个JavaScript对象,如:

var list = {
  "you": 100, 
  "me": 75, 
  "foo": 116, 
  "bar": 15
};

是否有一种方法可以根据值对属性进行排序?最后得到

list = {
  "bar": 15, 
  "me": 75, 
  "you": 100, 
  "foo": 116
};

当前回答

一个过时问题的后续答案。我写了两个函数,一个是按键排序,另一个是按值排序,并在两个函数中以排序形式返回对象。它也应该在字符串上工作,因为这就是我张贴这个的原因(如果值不是数字的话,上面的一些按值排序有困难)。

const a = { absolutely: "works", entirely: 'zen', best: 'player', average: 'joe' } const prop_sort = obj => { return Object.keys(obj) .sort() .reduce((a, v) => { a[v] = obj[v]; return a; }, {}); } const value_sort = obj => { const ret = {} Object.values(obj) .sort() .forEach(val => { const key = Object.keys(obj).find(key => obj[key] == val) ret[key] = val }) return ret } console.log(prop_sort(a)) console.log(value_sort(a))

其他回答

JavaScript对象根据定义是无序的(参见ECMAScript语言) 规范,第8.6节)。语言规范甚至不能保证,如果你连续迭代一个对象的属性两次,第二次它们会以相同的顺序出现。

如果你需要对事物进行排序,可以使用数组和array .prototype.sort方法。

没有多个for循环的排序值(按键排序将排序回调中的索引更改为“0”)

Const list = { “你”:100年, “我”:75年, “foo”:116年, “酒吧”:15 }; let sorted = Object.fromEntries( Object.entries(列表)。排序((a,b) => a[1] - b[1]) ) console.log('已排序对象:',已排序)

找出每个元素的频率,并按频率/值进行排序。

Let response =["苹果","橘子","苹果","香蕉","橘子","香蕉","香蕉"]; 设frequency = {}; response.forEach(函数(项){ 频率[项目]=频率[项目]?频率[项]+ 1:1; }); console.log(频率); let intents = Object.entries(frequency) .sort((a, b) => b[1] - a[1]) . map(函数(x) { 返回x [0]; }); console.log(意图);

输出:

{ apple: 2, orange: 2, banana: 3 }
[ 'banana', 'apple', 'orange' ]

我遵循slebetman给出的解决方案(去阅读它的所有细节),但调整,因为你的对象是非嵌套的。

// First create the array of keys/values so that we can sort it:
var sort_array = [];
for (var key in list) {
    sort_array.push({key:key,value:list[key]});
}

// Now sort it:
sort_array.sort(function(x,y){return x.value - y.value});

// Now process that object with it:
for (var i=0;i<sort_array.length;i++) {
    var item = list[sort_array[i].key];

    // now do stuff with each item
}

以防万一,有人正在寻找保持对象(键和值),使用@Markus R和@James Moran注释的代码引用,只需使用:

var list = {"you": 100, "me": 75, "foo": 116, "bar": 15};
var newO = {};
Object.keys(list).sort(function(a,b){return list[a]-list[b]})
                 .map(key => newO[key] = list[key]);
console.log(newO);  // {bar: 15, me: 75, you: 100, foo: 116}