0 / 0 / 0
Регистрация: 22.06.2022
Сообщений: 13
1

Какая или какие строки кода изменяют массив

18.07.2022, 15:34. Показов 273. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Не могу разобраться, какая строка или строки кода изменяют массив cid, переданный в качестве аргумента функции и как можно это исправить.
Пробовал внутри функции копировать массив с помощью slice и [...arr], оригинальный массив все равно изменяется.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
let nominal = {"ONE HUNDRED": 100, "TWENTY": 20, "TEN": 10, "FIVE": 5, "ONE": 1, "QUARTER": 0.25, "DIME": 0.1,  "NICKEL": 0.05, "PENNY": 0.01};
let key_nominal = Object.keys(nominal);
function findIndex(name, arr) {
    for (let i in arr) {if (arr[i][0] == name) {return i}};
}
function calculate(change, cid) {
    let arr_nom = [];
    for (let i in key_nominal) {
        let sum = 0;
        while(change >= nominal[key_nominal[i]] && cid[findIndex(key_nominal[i], cid)][1] > 0) {
            change = (change - nominal[key_nominal[i]]).toFixed(2);
            cid[findIndex(key_nominal[i], cid)][1] -= nominal[key_nominal[i]];
            sum += nominal[key_nominal[i]];
        }
        if (sum > 0) {arr_nom.push([key_nominal[i], sum]);}
    }
    return arr_nom;
}
function rest(change, cid) {
    for (let i in key_nominal) {
        while(change >= nominal[key_nominal[i]] && cid[findIndex(key_nominal[i], cid)][1] > 0) {
            change = (change - nominal[key_nominal[i]]).toFixed(2);;
            cid[findIndex(key_nominal[i], cid)][1] -= nominal[key_nominal[i]];
        }
    }
    return change != 0 ? true : false;
}
function checkCashRegister(price, cash, cid) {
    let change = cash - price;
    let av_nominal = cid.filter((item) => nominal[item[0]] <= change);
    let all_cash = av_nominal.reduce((sum, item) => sum + item[1], 0);
    if (change == all_cash) {return {status: "CLOSED", change: cid};}
    else if (all_cash < change || rest(change, cid)) {
        return {status: "INSUFFICIENT_FUNDS", change: []};
    }
    return {status: "OPEN", change: calculate(change, cid)};
}
console.log(checkCashRegister(3.26, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]));
Добавлено через 9 минут
В каждой функции сокпировал массив в новую переменную, но оригинальный массив все равно изменяется...
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
let nominal = {"ONE HUNDRED": 100, "TWENTY": 20, "TEN": 10, "FIVE": 5, "ONE": 1, "QUARTER": 0.25, "DIME": 0.1,  "NICKEL": 0.05, "PENNY": 0.01};
let key_nominal = Object.keys(nominal);
function findIndex(name, arr) {
    for (let i in arr) {if (arr[i][0] == name) {return i}};
}
function calculate(change, cid) {
    let arr_nom = [];
    let newcid = cid.slice();
    for (let i in key_nominal) {
        let sum = 0;
        while(change >= nominal[key_nominal[i]] && newcid[findIndex(key_nominal[i], newcid)][1] > 0) {
            change = (change - nominal[key_nominal[i]]).toFixed(2);
            newcid[findIndex(key_nominal[i], newcid)][1] -= nominal[key_nominal[i]];
            sum += nominal[key_nominal[i]];
        }
        if (sum > 0) {arr_nom.push([key_nominal[i], sum]);}
    }
    return arr_nom;
}
function rest(change, cid) {
    let newcid = cid.slice();
    for (let i in key_nominal) {
        while(change >= nominal[key_nominal[i]] && newcid[findIndex(key_nominal[i], newcid)][1] > 0) {
            change = (change - nominal[key_nominal[i]]).toFixed(2);;
            newcid[findIndex(key_nominal[i], newcid)][1] -= nominal[key_nominal[i]];
        }
    }
    return change != 0 ? true : false;
}
function checkCashRegister(price, cash, cid) {
    let change = cash - price;
    let av_nominal = cid.filter((item) => nominal[item[0]] <= change);
    let all_cash = av_nominal.reduce((sum, item) => sum + item[1], 0);
    if (change == all_cash) {return {status: "CLOSED", change: cid};}
    else if (all_cash < change || rest(change, cid)) {
        return {status: "INSUFFICIENT_FUNDS", change: []};
    }
    return {status: "OPEN", change: calculate(change, cid)};
}
console.log(checkCashRegister(3.26, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]));
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2022, 15:34
Ответы с готовыми решениями:

А у вас какая длина строки? (Стиль кода)
Собственно стало интересно есть ли какие то стандарты/рекомендации к кол-ву символов в строке? ...

Какие строки кода можно упростить?
Какие строки кода можно упростить для оптимизации ну и эстетики кода, подскажите пожалуйста. ...

При удалении строки в табличной части докумена, как узнать какая строка удаляется и какие у нее значения в каждой ячейке
а???

Строки с кириллицей в Lazarus: какая буква, первая или последняя, встречается в строке
Если бы требовалось подсчитать количество английских букв, да в строке из английских букв, то...

Как привязать массив, List<> или ObservableCollection<> к заголовкам строки или столбца в DataGrid?
Как привязать массив, List&lt;&gt; или ObservableCollection&lt;&gt; к заголовкам строки или столбца в...

5
Эксперт JS
3499 / 1336 / 368
Регистрация: 14.03.2022
Сообщений: 3,211
18.07.2022, 16:00 2
Цитата Сообщение от zorin1497 Посмотреть сообщение
Пробовал внутри функции копировать массив с помощью slice и [...arr], оригинальный массив все равно изменяется.
Такое клонирование клонирует только сам массив. Сложные элементы ссылаются на те же элементы.
Как вариант - превращать все в джейсон-строку и потом парсить. Так у тебя получится какой/никакой, а клон.
0
0 / 0 / 0
Регистрация: 22.06.2022
Сообщений: 13
18.07.2022, 16:06  [ТС] 3
Есть вариант обойтись без json?
0
Эксперт JS
3499 / 1336 / 368
Регистрация: 14.03.2022
Сообщений: 3,211
18.07.2022, 16:18 4
Цитата Сообщение от zorin1497 Посмотреть сообщение
Есть вариант обойтись без json?
Писать свою функцию...
Типа такой
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const Y = deepClone(Z);
function deepClone(obj) {
  const clObj = {};
  for(const i in obj) {
    if (obj[i] instanceof Object) {
      clObj[i] = deepClone(obj[i]);
      continue;
    }
    clObj[i] = obj[i];
  }
  return clObj;
}
Y.addnlProp = { fd: 45 };
console.log('Z object after cloning: ', Z);
console.log('Y object: ', Y);
https://habr.com/ru/post/480786/
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
18.07.2022, 16:19 5
А ещё лучше не костылить и продумать архитектуру программы более детально.
0
0 / 0 / 0
Регистрация: 22.06.2022
Сообщений: 13
18.07.2022, 16:21  [ТС] 6
Всем спасибо за ответы, решил данный вопрос путем назначения изменяемого значения переменной.
Прикладываю фрагмент кода.
Javascript
1
2
3
4
5
6
7
function rest(change, cid) {
    for (let i in key_nominal) {
        let amount = cid[findIndex(key_nominal[i], cid)][1];
        while(change >= nominal[key_nominal[i]] && amount > 0) {
            change = (change - nominal[key_nominal[i]]).toFixed(2);;
            amount -= nominal[key_nominal[i]]}}
    return change != 0 ? true : false;
0
18.07.2022, 16:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2022, 16:21
Помогаю со студенческими работами здесь

Заданы радиус круга, две смежные стороны прямоугольника. Определить какая фигура имеет большую площадь, какая меньшую, или они равны?
помогите решить. Заданы радиус круга, две смежные стороны прямоугольника. Определить какая фигура...

Какие строки имеют искомое число,а какие нет
Нужно выполнить обработку элементов прямоугольной матрицы А,имеющей N строк и М столбцов.все...

Массив: Нужно во время работы программы изменять размер массива и добавлять в начало или в конец какие-либо значения.
Возникла проблема в работе с массивом. Нужно во время работы программы изменять размер массива и...

Двумерный массив состоит из нулей и единиц. Найти хотя бы одну строки или один столбец, не содержащих 1, или сообщить, что таковых нет
0Добрый день!! Помогите пожалуйста решить эту задачу: Двумерный массив состоит из нулей и единиц....

Динамический двумерный массив - пояснить некоторые строки кода
Тему понял, а вот логику программы не понимаю. Буду признателен, если подробно разъясните....

Строки.Определить, какая буква - "о" или "а" входит в текст чаще и на сколько.
подскажите пожалуйста, как определить на сколько одна буква входит в текст чаще,чем другая....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru