猛跑小猪
我开始知道我们不能根据值对 js 对象键进行排序,因为键的顺序每次都是随机的。这不是真的(它不是随机的,而且每次都不同),但是对 JavaScript对象进行排序几乎从来没有用。您有多种选择来获取您显示的数组。一个简单的方法是使用Object.entries获取一组[key, value]数组,然后sort通过map以下方式从中获取键:const obj = {'a':20,'b':6,'c':21,'d':12};const keys = Object.entries(obj) .sort(([k1, v1], [k2, v2]) => v2 - v1) .map(([k, v]) => k);console.log(keys);Object.entries 相对较新,但如果需要,很容易填充。如果您在 ES5 中需要它(使用Object.entriespolyfill):var obj = {'a':20,'b':6,'c':21,'d':12};var keys = Object.entries(obj) .sort(function(e1, e2) { return e2[1] - e1[1]; }) .map(function(e) { return e[0]; });console.log(keys);在评论中,您还询问了如何将值放在单独的数组中。您可以map通过推入它来构建该值数组作为副作用,如下所示:const obj = {'a':20,'b':6,'c':21,'d':12};const values = [];const keys = Object.entries(obj) .sort(([k1, v1], [k2, v2]) => v2 - v1) .map(([k, v]) => { values.push(v); return k; });console.log(keys);console.log(values);...或者如果使用map副作用困扰您(这通常不是最佳实践),只需使用forEach(或for-of) 代替:const obj = {'a':20,'b':6,'c':21,'d':12};const keys = [];const values = [];Object.entries(obj) .sort(([k1, v1], [k2, v2]) => v2 - v1) .forEach(([k, v]) => { keys.push(k); values.push(v); });console.log(keys);console.log(values);该for-of版本:const obj = {'a':20,'b':6,'c':21,'d':12};const keys = [];const values = [];for (const [k, v] of Object.entries(obj).sort(([k1, v1], [k2, v2]) => v2 - v1)) { keys.push(k); values.push(v);}console.log(keys);console.log(values);(您可以对 的结果使用临时变量.sort,然后使用for (const [k, v] of theTemporaryVariable) {。)
烙印99
const obj = {'a':20,'b':6,'c':21,'d':12};const result = Object.keys(obj) .reduce((acc, key) => { const value = obj[key]; acc.push({ key, value }); acc.sort((a, b) => b.value - a.value); return acc; }, []);console.log(result);输出[ { key: 'c', value: 21 }, { key: 'a', value: 20 } { key: 'd', value: 12 } { key: 'b', value: 6 }]