js сортировка файлов в массиве
у меня есть массив с именами файлов
const names = [name1, name2, name3] // Массив строк
также у меня есть массив объектов, в каждом объекте есть поле name
const arr = [{name: 'name3', ...}, {name: 'name1', ...},{name: 'name2', ...},]
на выходе нужно получить, чтобы в массиве arr порядок объектов был правильный, таким какой он в массиве names
Я сделал так прямо и в лоб, может кто знает решение по красивше?
downloadInputFiles(apiFetcher, pTask).then(parentFiles => {
console.log('order: ', order);
const newParentFiles = [];
for (let i = 0; i < order.length; i += 1) {
const obj = parentFiles.find(item => item.name === order[i]);
console.log(obj);
newParentFiles.push(obj);
}
debugger;
console.log('newParentFiles', newParentFiles);
if (parentFiles) {
setPrefetchedFiles(parentFiles);
}
На счет производительности не подскажу, будет ли эффект, но эстетически смотреться будет красивее.
Внимание! Код ниже будет мутировать исходный массив arr
const names = ['name1', 'name2', 'name3'];
const arr = [{name: 'name3'}, {name: 'name1'},{name: 'name2'},]
const newParentFiles = names.map(name => {
// Находим индекс нужного элемента
const indexFrom = arr.findIndex(item => item.name === name);
// Вырезаем его из массива и возвращаем в новый
return arr.splice(indexFrom, 1)[0];
});
console.log(newParentFiles);
Без мутации исходного
const names = ['name1', 'name2', 'name3'];
const arr = [{name: 'name3'}, {name: 'name1'},{name: 'name2'},]
const newParentFiles = names.map(name => arr.find(item => item.name === name));
console.log(newParentFiles);
По производительности на больших массивах эффект от первого варианта может быть, т.к. с каждой итерацией массив arr уменьшается, однако, стоит помнить, что при этом будут расходы на пересчет индексов.
Такое надо проверять отдельными тестами, накидать несколько вариантов и прогнать каждый несколько тысяч раз на разных объемах