Получить "таблицу лидеров" списка номеров - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь получить своего рода "таблицу лидеров" из списка чисел. Я думал о создании массива со всеми числами, подобными этому

var array = [];
for (a = 0; a < Object.keys(wallets.data).length; a++) { //var wallets = a JSON (parsed) response code from an API.
    if (wallets.data[a].balance.amount > 0) {
        array.push(wallets.data[a].balance.amount)
    }
}
//Add some magic code here that sorts the array into descending numbers

Это отличный вариант, однако мне нужны другие значения для чисел (одна строка). Вот почему я подумал, что JSON будет лучшим вариантом, чем массив. Я просто не знаю, как бы я это реализовал.

Я бы хотел получить json вот так:

[
    [
     "ETH":
        {
         "balance":315
        }
    ],
    [
     "BTC":
        {
         "balance":654
        }
    ],
    [
     "LTC":
        {
         "balance":20
        }
    ]
]

А потом иметь возможность называть их отсортированными по убыванию баланс примерно так:

var jsonarray[0].balance = Highest number (654)
var jsonarray[1].balance = Second highest number (315)
var jsonarray[2].balance = Third highest number (20)

Если кто-нибудь из вас может помочь мне или указать в правильном направлении, я был бы очень признателен.

PS: Мне нужно это происходит в RAW JS без html или библиотек.

Ответы [ 3 ]

1 голос
/ 03 августа 2020

Вы должны отсортировать объекты перед тем, как преобразовать их в JSON. Вы можете написать свою функцию или использовать лямбду. См. Это []

0 голосов
/ 03 августа 2020

Всем спасибо за ответ. В итоге я использовал что-то вроде:

leaderboard = []
for (a = 0; a < Object.keys(wallets.data).length; a++) {
    if (wallets.data[a].balance.amount > 0) {
        leaderboard.push({"currency":wallets.data[a].balance.currency, "price":accprice}) //accprice = variable which contains the value of the userhold coins of the current coin in EUR
    }
}
console.log(leaderboard.sort(sort_by('price', true, parseInt)));
0 голосов
/ 03 августа 2020

Поскольку вы имеете дело с криптовалютой, вы можете использовать код валюты в качестве уникального идентификатора.

Вместо массива вы можете определить объект с валютой как такие свойства:

const coins = {
     ETH: [300, 200, 500],
     BTC: [20000, 15000, 17000]
}

, тогда вы можете получить доступ к каждому из них и использовать Math.max или Math.min , чтобы получить самое высокое / самое низкое значение этой хэш-карты. EG Math.max(coins.BTC)

И если вам нужно перебрать монеты, у вас есть Object.keys:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

...