Вы могли бы sort
массив пар ключ-значение, возвращаемый Object.entries
, и получить первые n
ключи, такие как:
let obj={"1632":45,"1856":12,"1848":56,"1548":34,"1843":88,"1451":55,"4518":98,"1818":23,"3458":45,"1332":634,"4434":33};
const n = 5;
const smallestNKeys = Object.entries(obj)
.sort((a, b) => a[1] - b[1])
.slice(0, n)
.map(a => a[0])
console.log(smallestNKeys)
Или перебрать keys
, чтобы избежать дополнительных map
let obj={"1632":45,"1856":12,"1848":56,"1548":34,"1843":88,"1451":55,"4518":98,"1818":23,"3458":45,"1332":634,"4434":33};
const n = 5;
const smallestNKeys = Object.keys(obj)
.sort((a, b) => obj[a] - obj[b])
.slice(0, n)
console.log(smallestNKeys)
Поскольку вы упомянули самое маленькое ИЛИ самое большое, вы можете создать функцию, которая принимает параметр order
.Затем, основываясь на параметре, вы можете умножить 1 или -1 в обратном вызове compareFunction sort
.
let obj={"1632":45,"1856":12,"1848":56,"1548":34,"1843":88,"1451":55,"4518":98,"1818":23,"3458":45,"1332":634,"4434":33};
getSortedKeys = (obj, n, order) => {
const multiplier = order === "asc" ? 1 : -1;
return Object.keys(obj)
.sort((a, b) => multiplier * (obj[a] - obj[b]))
.slice(0, n)
}
console.log(getSortedKeys(obj, 3, "desc"))
console.log(getSortedKeys(obj, 5, "asc"))