gpt4 book ai didi

javascript - 获取按值排序的单独数组中的值和键

转载 作者:行者123 更新时间:2023-11-28 14:13:51 25 4
gpt4 key购买 nike

假设我有一个对象{'a':20,'b':6,'c':21,'d':12}

按值降序排序后,所需的输出:键:['c','a','d','b']值:[21,20,12,6]

如何才能有效地实现这一目标?我开始知道我们不能根据值对 js 对象键进行排序,因为键的顺序每次都是随机的。

最佳答案

I came to knew that we cannot we cant sort js object keys based on values, since the order of keys is random everytime.

这不是真的(它不是随机的,而且每次都不同),但是对 JavaScript 对象进行排序几乎没有用。

您有多种选择来获取所显示的数组。一个简单的方法是使用 Object.entries 获取一组 [key, value] 数组,然后对其进行排序,然后仅获取通过 map 获取的 key :

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 polyfilled):

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) {。)

关于javascript - 获取按值排序的单独数组中的值和键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58540292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com