Как отсортировать список в другом списке в lodash - PullRequest
0 голосов
/ 17 сентября 2018

дал список

[
{id:'i1',value:'v1'},
{id:'i3',value:'v3'},
{id:'i4',value:'v4'},
{id:'i2',value:'v2'},
{id:'i5',value:'v5'},
]

и другой заказанный список идентификаторов

['i1','i2','i3','i4','i5']

получить

[
{id:'i1',value:'v1'},
{id:'i2',value:'v2'},
{id:'i3',value:'v3'},
{id:'i4',value:'v4'},
{id:'i5',value:'v5'},
]

Как это сделать в lodash?

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018
let arr = ['i1','i2','i3','i4','i5'];
let arrObj = [
    {id:'i1',value:'v1'},   
    {id:'i3',value:'v3'},
    {id:'i4',value:'v4'},
    {id:'i2',value:'v2'},
    {id:'i5',value:'v5'}
]

console.table(arrObj);

arr.map(v => {
    arrObj.sort( v1 => { return v1.id == v ? true : false} )
})

console.table(arrObj);
0 голосов
/ 17 сентября 2018
const arr = ['i1','i2','i3','i4','i5'];
const arrObj = [
{id:'i1',value:'v1'},
{id:'i3',value:'v3'},
{id:'i4',value:'v4'},
{id:'i2',value:'v2'},
{id:'i5',value:'v5'}
]
const sortedArr = [];

_.map(arr, a => sortedArr.push(_.find(arrObj, ['id', a])));
console.log(sortedArr)
0 голосов
/ 17 сентября 2018

Используйте метод sortBy и возвращайте индексную позицию идентификатора из функции iteratee

let sortedArray = _.sortBy(input, (v) => order.indexOf(v.id))

где

input = [
  {id:'i1',value:'v1'},
  {id:'i3',value:'v3'},
  {id:'i4',value:'v4'},
  {id:'i2',value:'v2'},
  {id:'i5',value:'v5'},
]
order = ['i1','i2','i3','i4','i5']
0 голосов
/ 17 сентября 2018

Конвертировать массив в объект, где ключ id для лучшего поиска. Замените каждый элемент в упорядоченном списке фактическим значением.

Пограничный регистр: два массива имеют одинаковые элементы

const foo = [
  {id:'i1',value:'v1'},
  {id:'i3',value:'v3'},
  {id:'i4',value:'v4'},
  {id:'i2',value:'v2'},
  {id:'i5',value:'v5'},
];

const ordered = ['i1','i2','i3','i4','i5'];

const fooMap = _.keyBy(f, 'id');

const orderedFoo = ordered.map(id => fooMap[id])
...