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

用户12188450

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

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

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

TJ克劳德

我开始知道我们不能根据值对 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) {。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Ruby中的键数组的哈希值中获取值的方法

如何在Swift中将所有键和值从NSDictionary获取到单独的String数组中?

如何比较键的值并在 PHP 数组中获取值

如何从Perl中从引用的哈希值和键数组有效地获取值数组?

在按值日期时间排序的字典中获取值?

哈希表键和值存储在单独的数组列表中

如何从生成的json中获取单独的键和值?

红宝石数组哈希按值获取键和按键获取值

仅从数组中获取值(无键)

从 json 数组键中获取值以 @ 开头

MongoDB:使用新键将键和值作为单独的数组获取

从JavaScript中的键/值变量获取值

在数组中对NSDictionary键和值进行排序

如何使用PHP从数组中获取数组的键和值

在按键排序的字典中迭代键/值对

如何从具有键/值对对象的数组中获取值?

在Spring Boot中仅获取值而不是JSON响应中的键和值

通过匹配值从数组中获取值

带有 Unity 和 Firebase 数据库的字典数组 - 从键中获取值

在C#中获取对象数组的键和值

将JavaScript数组的键和值获取到变量中

获取值是数组的对象数组中的所有键

如何使用数组中的键获取值数组

如何在ElasticSearch中的数组中搜索单独的键和值字段?

Pyspark - 从具有最小值和最大值范围的数组中获取值

在SQL中获取值和类似值

如何从数组中获取从php中最高值到最低值排序的键?

在TypeScript中对键对值数组进行排序

如何通过对象数组中的动态键映射获取值?