Как преобразовать объект в массив в порядке, используя Lodash - PullRequest
0 голосов
/ 22 октября 2018

Скажем, у меня есть объект:

obj {
  1:{
    index: 3
  },
  2:{
    index: 1
  },
  3:{
    index: 2
  },
  4:{
    index: 0
  }
}

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

[ { index: 0 }, { index: 1 }, { index: 2 }, { index: 3 } ]

Так как _.значения, но возможность сортировки по свойству?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вам действительно не нужна библиотека для этого, так как в простом JS она практически такая же, как с Object.values, а затем sort:

const obj = { 1:{ index: 3 }, 2:{ index: 1 }, 3:{ index: 2 }, 4:{ index: 0 } }

const result = Object.values(obj).sort((a,b) => a.index - b.index)

console.log(result)

Но если вам действительно нужно lodash, тогда это действительно просто orderby или sortBy, поскольку они работают с объектами без необходимости выполнять values и т. Д.:

const obj = { 1:{ index: 3 }, 2:{ index: 1 }, 3:{ index: 2 }, 4:{ index: 0 } }

const result = _.orderBy(obj, 'index')  // or _.sortBy

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 22 октября 2018

Вы не найдете ни одного метода, который бы делал все, что вы хотите.Вместо этого вы должны разделить свою работу на более мелкие куски и объединить их в цепочку.Итак, как вы написали:

как _.values, но возможность сортировки по свойству

Вы пишете о двух операциях: извлечение значений из карты (используя _.values), а затем отсортируйте полученный массив по свойству (это можно сделать с помощью _.sortBy).

Чтобы запустить цепочку операций в Lodash, используйте _.chain и для материализации цепочки используйте chain.value().

Фрагмент:

const obj = {
    1:{
        index: 3
    },
    2:{
        index: 1
    },
    3:{
        index: 2
    },
    4:{
        index: 0
    }
};

const result = _.chain(obj)
    .values()
    .sortBy('index')
    .value();

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
...