Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменяется исходный массив (https://javascript.ru/forum/misc/83765-izmenyaetsya-iskhodnyjj-massiv.html)

_marisha 03.03.2022 12:54

Изменяется исходный массив
 
Доброго времени суток!
Есть функция checkCashRegister, где price - цена покупки, cash - оплата покупки, cid - наличность в кассе

function checkCashRegister(price, cash, cid) {
let exchange = [...cid]
    for (let i = 0; i < exchange.length; i++) {
    //здесь в exchange пушу полученные результаты
    }
}


cid приходит в виде массива с массивами
[
        ["PENNY", 0.5],
        ["NICKEL", 0],
        ["DIME", 0],
        ["QUARTER", 0],
        ["ONE", 0],
        ["FIVE", 0],
        ["TEN", 0],
        ["TWENTY", 0],
        ["ONE HUNDRED", 0]
    ]


В самом начале копирую массив в let exchange

Далее в цикле работаю с массивом exchange и пушу в него значения.
В итоге нужно вернуть исходный cid, а он возвращается измененный.
Подскажите, каким образом скопировать cid и не менять его?

Варианты, какие были испробованы, но cid всё равно изменяется:
let exchange = [...cid]
let exchange = cid.slice()
let exchange = cid.concat()
let exchange = Array.from(cid)
let exchange = JSON.parse(JSON.stringify(cid))

рони 03.03.2022 13:43

_marisha,
элементы вашего массива нужно дублировать!
let exchange = cid.map( a => a.slice(0));

ksa 03.03.2022 14:55

Цитата:

Сообщение от рони
нужно дублировать!
let exchange = cid.map( a => a.slice(0));

Или вовсе радикально. :)
let exchange = JSON.parse(JSON.stringify(cid))

_marisha 04.03.2022 06:40

Цитата:

Сообщение от рони (Сообщение 544058)
_marisha,
элементы вашего массива нужно дублировать!
let exchange = cid.map( a => a.slice(0));

- спасибо, то, что нужно :thanks:


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