Упорядочить массив объекта другим массивом объекта в JavaScript - PullRequest
0 голосов
/ 19 сентября 2018

Как упорядочить массив объектов другим массивом объектов.

Это мой код:

let arrayItem = [
    {
        'id': '#id1',
        'name': 'one',
        'bundle': 'bundle1'
    },
    {
        'id': '#id2',
        'name': 'two',
        'bundle': 'bundle2'
    },
    {
        'id': '#id3',
        'name': 'three',
        'bundle': 'bundle3'
    }
]

Это массив для упорядочения:

let orderItem = [
    {
        'id': '#id3',
        'name': 'three'
    },
    {
        'id': '#id1',
        'name': 'one',
    },
    {
        'id': '#id2',
        'name': 'two'
    }
]

Мне нужны такие данные, как:

let resultItem = [
    {
        'id': '#id3',
        'name': 'three',
        'bundle': 'bundle3'
    },
    {
        'id': '#id1',
        'name': 'one',
        'bundle': 'bundle1'
    },
    {
        'id': '#id2',
        'name': 'two',
        'bundle': 'bundle2'
    }
]

Я хочу упорядочить массив объектов по другому массиву объектов по нескольким ключам.

Спасибо

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать Сортировка , как предложено @Ankit Agarwal.

Или вы можете заставить его работать для вас, используя простую строку ниже.Это поможет.

var orderedItem = orderItem.map(orderObj => 
       arrayItem.find(actualObj => actualObj.id === orderObj.id))

Я просто запускаю map на вашем orderItem , find на соответствующем объекте на arrayItem , а затем вернуть объект из вашего arrayItem.

Надеюсь, это поможет ..

0 голосов
/ 19 сентября 2018

Вы можете взять Map для хранения индекса / порядка, а затем взять дельту индексов для сортировки массива.

var arrayItem = [{ id: '#id1', name: 'one', bundle: 'bundle1' }, { id: '#id2', name: 'two', bundle: 'bundle2' }, { id: '#id3', name: 'three', bundle: 'bundle3' }],
    orderItem = [{ id: '#id3', name: 'three' }, { id: '#id1', name: 'one', }, { id: '#id2', name: 'two' }],
    order = new Map(orderItem.map(({ id }, i) => [id, i]));
    
arrayItem.sort((a, b) => order.get(a.id) - order.get(b.id));

console.log(arrayItem);
0 голосов
/ 19 сентября 2018

Поскольку у вас есть массив объектов в вашем orderArray, вам сначала нужно найти индекс этого объекта заказа, а затем получить разницу index, чтобы отсортировать исходный массив:

let arrayItem = [
    {
        'id': '#id1',
        'name': 'one',
        'bundle': 'bundle1'
    },
    {
        'id': '#id2',
        'name': 'two',
        'bundle': 'bundle2'
    },
    {
        'id': '#id3',
        'name': 'three',
        'bundle': 'bundle3'
    }
];

let orderItem = [
    {
        'id': '#id3',
        'name': 'three'
    },
    {
        'id': '#id1',
        'name': 'one',
    },
    {
        'id': '#id2',
        'name': 'two'
    }
];
arrayItem.sort(function(a, b){
  var aIndex = orderItem.findIndex(({id, name}) => a.id===id && a.name===name);
  var bIndex = orderItem.findIndex(({id, name}) => b.id===id && b.name===name);
  return aIndex - bIndex;
});
console.log(arrayItem);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...