сортировать массив объектов на основе свойств другого массива объектов - PullRequest
0 голосов
/ 13 июня 2018

у меня есть два массива объектов в массивах js.dummy, показанных ниже.

arr1=[{'id':1,'name':'David'},
      {'id':2,'name':'Miles'},
      {'id':3,'name':'John'},];

arr2=[{'id':2,'age':22},
      {'id':3,'age':18},
      {'id':1,'age':12},];

Могу ли я отсортировать arr1 в том же порядке идентификаторов, что и arr2.таким образом, arr1 становится

[{'id':2,'name':'Miles'},
      {'id':3,'name':'John'},
      {'id':1,'name':'David'},];

фактические массивы имеют около 900 объектов каждый. Так есть ли эффективный способ достижения этого?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018
// cache arr1 id to index, id is key, index is value
let arr1IdToIndex = arr1.reduce((sum, cur, index) => (sum[cur.id] = index, sum), {})
let result = arr2.map(cur => arr1[arr1IdToIndex[cur.id]])
arr1 = result
0 голосов
/ 13 июня 2018

reduce второй массив для Map, индексированный id с, затем используйте Map.get, чтобы определить местоположение идентификатора при сортировке.Map с имеют гарантированное время поиска O (1):

const arr1 = [{'id':1,'name':'David'},{'id':2,'name':'Miles'},{'id':3,'name':'John'},];
const arr2 = [{'id':2,'age':22},{'id':3,'age':18},{'id':1,'age':12},];

const ids = arr2.reduce((map, { id }, i) => map.set(id, i), new Map());
arr1.sort((a, b) => ids.get(a.id) - ids.get(b.id));
console.log(arr1);

Тем не менее, 900 предметов - это совсем немного в наше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...