@Adil1603

Как сделать сортировку массива по значениям другого массива?

Нужно отсортировать массив people по значениям массива ordersArr(id соответствуют значениям массива)
Есть рабочий код:
const ordersArr = [4, 2, 1, 3];
const people = [
    { id: 1, name: 'Максим' },
    { id: 2, name: "Николай" },
    { id: 3, name: "Ангелина" },
    { id: 4, name: "Виталий" },
];

const giveTalonsInOrder = (patients, orders) => {
    const objectWithIndexes = patients.reduce((acc, curPerson) => {
        acc[curPerson.id] = curPerson;
        return acc;
    }, {});
    return orders.map((order) => objectWithIndexes[order]);
}

const result = giveTalonsInOrder(people, ordersArr);
console.log('result', result);


Мне не понятно, что значит строка в аккумуляторе редьюс
acc[curPerson.id] = curPerson;
что такое редьюс вроде знаю, но не могу тут понять как работает.

дальше, где идет создание нового массива на основе ordersArr, метод map добавляет в новый массив значения по индексу из objectWithIndexes?
return orders.map((order) => objectWithIndexes[order]);
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
@ForSureN1
frontend dev
acc - это объект, в который записывается ключ acc[curPerson.id] со значением curPerson, на выходе получаем объект objectWithIndexes в который складировались наши acc, получая не просто объект с объектами, а объекты у которых есть ключ с индексом { '1' : {}, '2': {}, '3': {}, '4': {} }
в map мы проходимся по массиву ordersArr - в котором создаем новый массив уже с нашими подставленными индексами objectWithIndexes[4] objectWithIndexes[2] objectWithIndexes[1] objectWithIndexes[3], тем самым создавая порядок таким, какой указан в массиве ordersArr
P.S. вот еще один вариант рабочий, но не знаю есть ли выигрыш от него по скорости
const sortArr = (obj, arr) => {
    return people.reduce((acc, item, i) => {
        acc.push(obj.find(item => item.id === arr[i]));
        return acc;
    }, []);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы