преобразовать два массива в один js
Мне нужно отсортировть два массива. Суть в том, что у меня есть массив инструментов и есть массив инструментов, которые использовались недавно. Если недавние есть, то мы их должны показывать первыми.
Я написал такую функцию. Сначала я проверяю, есть ли недавно используемые инструменты, прохожусь по ним циклом и нахожу недавний используемый инструмент в общем массиве инструментов, это нужно, чтобы взять его вместе с полями, которые у него есть (это объект).
Затем я кладу его в пустой массив newArrTools
и удаляю из allInstruments - это первоначальный массив со всеми инструментами.
Итого получается, мы имеем newArrTools массив, в котором по порядку лежат недавно используемые инструменты и allInstruments, в котором больше нет тех инструментов, которые использовались недавно.
Мы эти два массива конкатенируем newArrTools.concat(arrAllInstrumenta) и возвращаем общий массив, в котором все те же элементы, но те, которые использовались недавно, сейчас находятся на первом месте.
Но что-то тут не так, потому что первый раз функция отрабатывается правильно, а во второй раз мне возвращается массив на 2 айтема меньше (2 айтема были в последних используемых), как будто функция отрабатывает два раза и второй раз работает уже с другими данными.
Возможно нужно allInstrument не изменять, в общем подскажите, а то что-то никак!
const newArrTools = [];
const changeToolsArr = arrAllInstrumenta => {
if (lastUsedTools?.tools.length) {
for (let i = 0; i < lastUsedTools.tools.length; i += 1) {
const newInst = arrAllInstrumenta.find(
inst => inst.configName === lastUsedTools.tools[i]
);
if (newInst) {
newArrTools.push(newInst);
}
// затем мы удаляем newInst из allInstruments
// находим индекс элемента, который нужно удалить
const indexForDelete = arrAllInstrumenta.indexOf(newInst);
if (indexForDelete !== -1) {
arrAllInstrumenta.splice(indexForDelete, 1);
}
}
const tempArr = newArrTools.concat(arrAllInstrumenta);
return tempArr;
}
return arrAllInstrumenta;
};