@cekozaxev

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

[{
    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"
}]
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
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));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ArsenyMatytsyn
@ArsenyMatytsyn Куратор тега JavaScript
Руководитель frontend направления, предприниматель
Обычная сортировка, внутри которой ты будешь осуществлять поиск по массиву. Можно в принципе воспользоваться фильтром, и возвращать для сравнения значение с нулевым индексом.

При этом тебе надо будет продумать, что делать, если такого нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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