Loading...
yocalee avatar yocalee 3 Точки

04. Movies oт JS Fundamentals

Здравейте, 

имам проблем при проверяването на обектите в масива с филми. При име, съдържащо интервали, функцията вади null, докато при останалите едноименни филми, ми вади самия обект (точно както трябва да е). 

Ще се радвам на всякаква помощ! 

Ето линк: 

https://pastebin.com/gH88a1u6

0
JavaScript Fundamentals
Axiomatik avatar Axiomatik 2422 Точки

Code is fine, just movies.foreach() was not functioning and had to be replaced with movies.find() to always return a target movie.

Best,

function movieDirectors(array) {
    let movies = [];

    class Movie {
        constructor(name, director, date) {
            this.name = name;
            this.director = director;
            this.date = date;
        }
    }
    let contains = function (movieName) {
        // let movie = null;
        let movie = movies.find(m =>m.name === movieName);

        // movies.forEach(m => m.name === movieName ? movie = m : movie = null);
        return movie;
    }

    for (let i = 0; i < array.length; i++) {
        let command = array[i].split(' ');

        if (command.includes('addMovie')) {
            let name = command.slice(1, command.length).join(' ');
            movies.push(new Movie(name, null, null));
        } else if (command.includes('directedBy')) {
            let name1 = command.slice(0, command.indexOf('directedBy')).join(' ');
            // if (contains(name1) !== null) {
            if (contains(name1) !== undefined) {
                let movie = contains(name1);
                movie.director = command.slice(command.indexOf('directedBy') + 1, command.length).join(' ');
            }
        } else if (command.includes('onDate')) {
            let name2 = command.slice(0, command.indexOf('onDate')).join(' ');
            // if (contains(name2) !== null) {
            if (contains(name2) !== undefined) {
                let movie = contains(name2);
                movie.date = command.slice(command.indexOf('onDate') + 1, command.length).join(' ');
            }
        }
    }
    movies.forEach(m => m.director != null && m.name != null && m.date != null ? console.log(JSON.stringify(m)) : null);
}

 

0
yocalee avatar yocalee 3 Точки

Hello, 

actually the problem wasn't with foreach() function. ?

movie = m : movie = null

 is the problem. It should be

movie = m : null. 

Thank you for the quick response! 

0
Axiomatik avatar Axiomatik 2422 Точки

Hmmm, the first version of your foreach() had the correct syntax but since it was cycling through all of the movie-objects it will return false when movies contains multiple items (even though the movie you are looking for exists in the movies-array)

=> Check and step-into the foreach and see how the movie changes from being true to becoming null for 'Fast and Furious' since 'Godfather' is on second position and thus will return null for 'Fast and Furious'.

With find(), easier to use, otherwise movie = m : null is OK too.

Best

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