Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Логика в JS, не понимаю (https://javascript.ru/forum/misc/84900-logika-v-js-ne-ponimayu.html)

Сергей Ракипов 04.02.2023 05:40

1) Как вот этот параметр product понял что он будет объектом этого массива inputProducts

Вот это я понял
reduce взял массив products и вторым аргументом product взял элемент из этого массива

voraa 04.02.2023 09:27

Может все таки самому почитать как следует учебник.
Тут трудно написать больше, чем там написано.
2 Ну вот так язык js устроен.
К свойству можно обратиться и product.Accessories и product['Accessories']
3 Если product.Accessories != undefined (нет такого свойства) или 0 или null, или false или '', то взять в место него 0 (|| 0). иначе взять само значение product.Accessories и прибавить к нему product.quantity
Результат запихнуть в product.Accessories (если такого свойства нет, оно будет создано).

Сергей Ракипов 04.02.2023 16:50

почему вот эта часть qtyByCategories[product.category] стала значением вот этого свойства quantity:

voraa 04.02.2023 19:04

А она не стала.
qtyByCategories - это новый объект, изначально пустой, в который запихиваются свойства с именами из product.category, а значение накапливается сумма из quantity.
Читать и учить как работает reduce.

Сергей Ракипов 05.02.2023 03:27

voraa,
спасибо

Сергей Ракипов 09.02.2023 11:55

Кто может объяснить почему тут два оператора return

И почему JS понимает что после оператора + он должен сложить значение rating: elem.rating + 100 есть какое то правило синтаксиса ?

const test = [
        {
            author: 'a',
            category: "nub",
            rating: 10,
        },
        {
            author: 'b',
            rating: 20,

        },
        {
            author: 'c',
            category: "nub",
            rating: 30,
        },
    ]
    const fn = (arr) => {
        return arr.map((elem) => {
            return {
                avtor: elem.author,
                category: elem.category === undefined ? "nub" : elem.category,
                rating: elem.rating + 100
            }
        })
    }
    const testCopy = fn(test)
    console.log(testCopy);

voraa 09.02.2023 15:00

const fn = (arr) => {
        return arr.map((elem) => {
            return {
                avtor: elem.author,
                category: elem.category === undefined ? "nub" : elem.category,
                rating: elem.rating + 100
            }
        })
    }


Первый return относится к функции fn, а второй к функции, которая передается в map
Цитата:

Сообщение от Сергей Ракипов
почему JS понимает что после оператора + он должен сложить

Потому, что оператор + складывает значения, которые слева и справа от него.

Сергей Ракипов 10.02.2023 04:45

Цитата:

Сообщение от voraa (Сообщение 550569)

Первый return относится к функции fn, а второй к функции, которая передается в map

Потому, что оператор + складывает значения, которые слева и справа от него.

А в каких случай нужно еще дважды написать return?
Просто как я думаю что написал функцию и сказал ее вернуть значение. И как бы достаточно. Не совсем понятно почему после того как я функции сказал врени результат своей работы нужно еще раз внутри написать верни. Может быть есть какие то правила которые просят писать возврат дважды

Вот тут JS avtor: elem.author, он понял что нужно изменить ключ.

А вот тут rating: elem.rating + 100 он понял что нужно сложить значение. Хотя визуально можно понять что оставь имя прежним просто напиши еще 100 которое переведется в строку. Хотя признаю может и звучит как то идиотский. Просто какое то правила синтаксиса что если написано так то будет делать такие действие если по другому то другие.

voraa 10.02.2023 07:34

Цитата:

Сообщение от Сергей Ракипов
А в каких случай нужно еще дважды написать return?

return можно и нужно писать столько раз, сколько нужно. Например так
function sign (x) {
   if (x<0) return -1;
   if (x>0) return 1;
   return 0;
}

Если функция должна вернуть значение, то у нее должен быть хотя бы один return. Если используются две такие функции, значит надо будет написать return 2 раза.

Цитата:

Сообщение от Сергей Ракипов
Просто какое то правила синтаксиса что если написано так то будет делать такие действие если по другому то другие.

Есть простое правило. значение свойства при задании литерала объекта можно задавать выражением.

Сергей Ракипов 10.02.2023 09:46

voraa,
спасибо


Часовой пояс GMT +3, время: 02:03.