@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 направления, предприниматель
Обычная сортировка, внутри которой ты будешь осуществлять поиск по массиву. Можно в принципе воспользоваться фильтром, и возвращать для сравнения значение с нулевым индексом.

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

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект