Javascript найти n ключей с наименьшими (или самыми большими) значениями из и объекта - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть такой объект javascript.Учитывая число n, как мне получить 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
};

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Вы можете использовать Object.entries , 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 };

let findNkeys = 
    (input,n) => Object.entries(input)
                 .sort(([,A],[,B])=>A-B)
                 .reduce((op,[key],index)=>( index < n ? op.push(key) : op, op),[])

console.log(findNkeys(obj,2))
0 голосов
/ 24 февраля 2019

Вы могли бы 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"))
0 голосов
/ 24 февраля 2019

Вот код для поиска n ключей с наименьшими значениями.Чтобы изменить его на самые большие ключи, измените <в третьей строке на>

const smallestkeys = (obj, n = 1) =>
    Object.keys(obj).reduce((keyArr, k, i) =>
        (!i || obj[k] < obj[keyArr[keyArr.length - 1]])
            ? [k, ...keyArr].slice(0, n).sort((a, b) => obj[a] - obj[b])
            : keyArr
        , []);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...