C
C
cekozaxev2020-06-04 17:01:04
JavaScript
cekozaxev, 2020-06-04 17:01:04

How to sort an object by nested array?

[{
    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"
}]

Let's say I want a new array that is sorted by the level field, where name = "Anna". How to do it? The new array should be like this:

[, {
    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"
}]

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
Dmitry Belyaev, 2020-06-04
@cekozaxev

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));

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question