Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как подменить свойство объекта в цикле for (https://javascript.ru/forum/misc/82990-kak-podmenit-svojjstvo-obekta-v-cikle.html)

DenZen 22.08.2021 14:45

Как подменить свойство объекта в цикле for
 
Нужна помощь! :help: Перебираю циклом for массив с объектами примерно такой:
[{"product": "name1", "price": "10"}, {"product": "name2", "price": "20"}, {"product": "name3", "price": "30"}]


В некоторых случаях в объекте может не быть одного свойства, при этом я могу понять это по имени, например

[{"product": "name1", "price": "10"}, {"product": "Free"}, {"product": "name3", "price": "30"}]


Как можно в цикле, если "product": "Free" создать свойство "price": "0"?
Просто начинают свойства смещаться, получается product[1] = "Free", price[1] = "30" (из третьего объекта, т.к во втором нет цены), а product[2] = "30" и price[2] = undefined;

рони 22.08.2021 15:24

DenZen,
<script>
let ar = [{"product": "name1", "price": "10"}, {"product": "Free"}, {"product": "name3", "price": "30"}]
ar.forEach(e => {
    if(e.product === "Free") e.price = "0";
});

document.write(JSON.stringify(ar))
    </script>

ksa 22.08.2021 15:27

Цитата:

Сообщение от DenZen
В некоторых случаях в объекте может не быть одного свойства, при этом я могу понять это по имени, например
[{"product": "name1", "price": "10"}, {"product": "Free"}, {"product": "name3", "price": "30"}]

Как можно в цикле, если "product": "Free" создать свойство "price": "0"?

Как вариант...
const arr = [
	{"product": "name1", "price": "10"}, 
	{"product": "Free"}, 
	{"product": "name3", "price": "30"}
]
arr.forEach(el => alert(el.product + ' - ' + (el?.price ?? 0)))

Aetae 22.08.2021 18:37

el?.price ?? 0
первый вопросик бессмысленный. Еся там не будет el - оно свалится ещё на el.product.)

ksa 22.08.2021 20:21

Цитата:

Сообщение от Aetae
Еся там не будет el - оно свалится ещё на el.product.)

Странный вопрос... el точно есть и, по условиям задачи, есть и el.product.
Вопрос был только
Цитата:

Сообщение от DenZen
Как можно в цикле, если "product": "Free" создать свойство "price": "0"?

И мой пример именно по этому вопросу.

Aetae 22.08.2021 20:24

ksa,
В выражении
alert(el.product + ' - ' + (el?.price ?? 0)))
нет смысла использовать "?."


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