【问题标题】:How can I sort this JSON using Javascript?如何使用 Javascript 对这个 JSON 进行排序?
【发布时间】:2018-11-25 03:05:06
【问题描述】:

这是我的 JSON 文件数据。

{"434762882136408065":{"hacksilver":1500,"lastDaily":"06/15/2018","username":"Bader56"},"419738969530433548":{"hacksilver":"10009000","lastDaily":"NOT COLLECTED","username":"Robotos"}}

我希望它按最富有到不最富有来记录用户 喜欢

  1. 机器人:10009000
  2. 巴德56:1500

我试过了

Object.keys(userData).forEach(user => {
        console.log(userData[user].username+': '+userData[user].hacksilver);
    });

但它首先记录 Bader,我也尝试过 .reverse() 但如果这里有第三个人,它也是一样

【问题讨论】:

  • 当然,当您加载数组时,它首先会为您提供 Bader。尝试排序:stackoverflow.com/a/7889040/401499
  • 请举例?我是初学者这个东西
  • 检查我粘贴的链接 - 你有例子。

标签: javascript json node.js sorting


【解决方案1】:

你可以先sort()数组。

使用Object.values 将对象转换为数组。使用sort() 重新排序数组。使用forEach 循环遍历已排序的数组。

let userData = {"434762882136408065":{"hacksilver":1500,"lastDaily":"06/15/2018","username":"Bader56"},"419738969530433548":{"hacksilver":"10009000","lastDaily":"NOT COLLECTED","username":"Robotos"}}

Object.values(userData).sort((a, b) => b.hacksilver - a.hacksilver)
                       .forEach(o => {
                            console.log(o.username + ': ' + o.hacksilver);
                       })

如果你的nodejs不支持Object.values,你可以使用Object.keys作为:

let userData = {"434762882136408065":{"hacksilver":1500,"lastDaily":"06/15/2018","username":"Bader56"},"419738969530433548":{"hacksilver":"10009000","lastDaily":"NOT COLLECTED","username":"Robotos"}}

Object.keys(userData).sort((a, b) => userData[b].hacksilver - userData[a].hacksilver)
                     .forEach(o => {
                          console.log(userData[o].username + ': ' + userData[o].hacksilver);
                     })

文档:sort()forEach()

【讨论】:

  • 我得到 Object.values 不是一个函数,顺便说一句,我正在使用 nodejs
  • 什么版本的 Node.js?
  • @Josha 无论如何,Node v7+ 支持Object.values
  • 在数据中,hacksilver 具有数字和字符串形式的值。将其投射到Number
  • fs 本质上是异步的(我认为)。因此,在进行排序之前,请确保您已经拥有 userData
【解决方案2】:

将原始对象转换为数组,因此您可以对其使用sort 方法,然后按任何标准对其进行排序:

const dataObj = {"434762882136408065":{"hacksilver":1500,"lastDaily":"06/15/2018","username":"Bader56"},"419738969530433548":{"hacksilver":"10009000","lastDaily":"NOT COLLECTED","username":"Robotos"}};

// convert object to array
const dataArr = Object.keys(dataObj).map(key => dataObj[key]);

// sort it by hacksilver value
const sorted = dataArr.sort((a,b) => {
    return Number(b.hacksilver) - Number(a.hacksilver) 
});

console.log(sorted);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多