@beefront17

Merge двух массивов, как быстрее?

Добрый день! Скажите пожалуйста есть ли способ, который бы быстрее работал, слить два массива?
возможно с помощью коллекций?

const arr1 = [
	{
		id: '111',
		order: 0,
		value: 'sommme text',
	},
	{
		id: '222',
		order: 1,
		value: 'another text',
	},
];

const arr2 = [
	{
		o_id: "222",
		some: []
	},
	{
		o_id: "111",
		some: []
	},
];

const newArr = [];
arr1.forEach(item => {
	arr2.forEach(o => {
		if (item.id === o.o_id) {
			newArr.push({ ...item, ...o})
		}
	})
});


Буду благодарен)
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
const object = {};
const newArray = []
arr1.forEach(item => object[item.id] = item) // перегоняем первый массив в объект, где ключи объекта id элемента

arr2.forEach(item => {
    const objectItem = object[item.id];
    if (objectItem !== undefined) {
        const mergeItem = Object.assign({}, objectItem, item);
        newArray.push(mergeItem);
        object[item.id] = undefined;
    }
})
Это будет быстрее чем вложенный цикл по второму массиву.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
concat
не благодари, ссылка на jsperf

в твоем случае не мешало бы заменить массивы на объекты, тогда можно будет линейно
Ответ написан
muzikant777
@muzikant777
PHP/Vue разработчик
Рекомендую к просмотру: https://www.youtube.com/watch?v=HPFARivHJRY
Ответ написан
Комментировать
@msdosx86
const newArr = [...arr1, ...arr2];
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы