Сортировка объекта по вложенному массиву

[{
    skills: [{
        level: 22,
        name: "Anna",
    }, {
        level: 31,
        name: "Pasha"
    }, {
        level: 11,
        name: "Igor"
    }],
    id: "1"
}, {
    skills: [{
        level: 2,
        name: "Anna",
    }, {
        level: 35,
        name: "Pasha"
    }, {
        level: 335,
        name: "Igor"
    }],
    id: "2"
}, {
    skills: [{
        level: 101,
        name: "Anna",
    }, {
        level: 77,
        name: "Pasha"
    }, {
        level: 12,
        name: "Igor"
    }],
    id: "3"
}]

Допустим я хочу новый массив, который отсортирован по полю level, где name = "Anna". Как это сделать? Новый массив должен быть такой:

[, {
    skills: [{
        level: 101,
        name: "Anna",
    }, {
        level: 77,
        name: "Pasha"
    }, {
        level: 12,
        name: "Igor"
    }],
    id: "3"
}, {
    skills: [{
        level: 22,
        name: "Anna",
    }, {
        level: 31,
        name: "Pasha"
    }, {
        level: 11,
        name: "Igor"
    }],
    id: "1"
}, {
    skills: [{
        level: 2,
        name: "Anna",
    }, {
        level: 35,
        name: "Pasha"
    }, {
        level: 335,
        name: "Igor"
    }],
    id: "2"
}]

Ответы (1 шт):

Автор решения: Андрей Шилец
const newArray = arr.slice(); // так как sort мутирует массив, а нужен новый
const isAnnaSkill = skill => skill.name === 'Anna';
const getAnnaLevel = item => item.skills.find(isAnnaSkill)?.level;
newArray.sort((a, b) => getAnnaLevel(b) - getAnnaLevel(a));
→ Ссылка