假设我有一个对象 {'a':20,'b':6,'c':21,'d':12}
按降序对值进行排序后,所需的输出:Keys: ['c','a','d','b']
和Values: [21,20,12,6]
我怎样才能有效地实现这一目标?我开始知道我们不能根据值对 js 对象键进行排序,因为键的顺序每次都是随机的。
我开始知道我们不能根据值对 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.entries
polyfill):
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) {
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句