Loading...
Axiomatik avatar Axiomatik 2422 Точки

Everything is fine (including the sorting :-) ), you were just missing out on the third sorting-validation:

"The Components must be ordered by amount of Subcomponents, in descending order"

Just change your final for-loop to and judge gives 100%:

    for (let system of systems) {
        console.log(system.systemName);
        let components = system.components;
        
        for (let component of components.sort((a, b) => b.subcomponents.length - a.subcomponents.length)) {
            console.log(`|||${component.name}`)
            let subcomponents = component.subcomponents;  
            for (const subcomponent of subcomponents) {
                console.log(`||||||${subcomponent}`);
            } 
        }
    }

Or, alternative with Object.values():

function components(array) {

    class System {
        constructor(name) {
            this.systemName = name;
            this.components = [];
        }

        addComponent(component) {
            this.components.push(component);
        }
        get getComponents() {
            return this.components;
        }
    }
    class Component {
        constructor(name) {
            this.name = name;
            this.subcomponents = [];
        }
        addSubComponent(subcomponent) {
            this.subcomponents.push(subcomponent);
        }
    }

    let systems = [];

    for (let i = 0; i < array.length; i++) {
        let elements = array[i].split(' | ');
        let containsInSystems = (systemName) => {
            let system = null;
            systems.forEach(el => el.systemName === systemName ? system = el : null);
            return system;
        }

        if (containsInSystems(elements[0]) === null) {
            let system = new System(elements[0]);
            let component = new Component(elements[1]);
            component.addSubComponent(elements[2]);
            system.addComponent(component);
            systems.push(system);
        } else {
            let system = containsInSystems(elements[0]);

            let component = system.getComponents.find(el => el.name === elements[1]);

            if (component !== undefined) {
                component.addSubComponent(elements[2]);
            } else {
                let newComponent = new Component(elements[1]);
                newComponent.addSubComponent(elements[2]);
                system.addComponent(newComponent);
            }
        }
    }

    // systems = systems.sort(function (a, b) {
    //     if (a.components.length > b.components.length) { return -1; }
    //     if (a.components.length < b.components.length) { return 1; }
    //     if (a.systemName > b.systemName) { return 1; }
    //     if (a.systemName < b.systemName) { return -1; }
    //     else { return 0; }
    // });

    systems = Object.values(systems).sort((a, b) => {
        return b.components.length - a.components.length || a.systemName.localeCompare(b.systemName);
    });

    // for (let system of systems) {
    //     console.log(system.systemName);
    //     let components = system.components;

    //     for (let component of components.sort((a, b) => b.subcomponents.length - a.subcomponents.length)) {
    //         console.log(`|||${component.name}`)
    //         let subcomponents = component.subcomponents;
    //         for (const subcomponent of subcomponents) {
    //             console.log(`||||||${subcomponent}`);
    //         }
    //     }
    // }

    for (let system of Object.values(systems)) {
        console.log(system.systemName);
        let components = system.components;

        for (let component of components.sort((a, b) => b.subcomponents.length - a.subcomponents.length)) {
            console.log(`|||${component.name}`)
            let subcomponents = component.subcomponents;
            for (const subcomponent of subcomponents) {
                console.log(`||||||${subcomponent}`);
            }
        }
    }
}

 

Best,

0
18/12/2020 09:39:39
yocalee avatar yocalee 3 Точки

Thank you!!! : )

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.