Функция "reversedcurrConvert", содержащая цикл for и вызываемая в функции checkCashRegister, работает только с индекса 1 и далее. Любопытно, что это не работает для индекса 0, который равен cid[0][0]. Не могу понять, что могло вызвать такое поведение.
function reversedcurrConvert(cid) {
for (let i = 0; i < cid.length; i++) {
if (i = 0) {
cid[i][0] = "PENNY"
}
if (i = 1) {
cid[i][0] = "NICKEL"
}
if (i = 2) {
cid[i][0] = "DIME"
}
if (i = 3) {
cid[i][0] = "QUARTER"
}
if (i = 4) {
cid[i][0] = "ONE"
}
if (i = 5) {
cid[i][0] = "FIVE"
}
if (i = 6) {
cid[i][0] = "TEN"
}
if (i = 7) {
cid[i][0] = "TWENTY"
}
if (i = 8) {
cid[i][0] = "ONE HUNDRED"
}
}
return cid
}
function checkCashRegister(price, cash, cid) {
let change = {}
cid[0][0] = 0.01;
cid[1][0] = 0.05;
cid[2][0] = 0.1;
cid[3][0] = 0.25;
cid[4][0] = 1;
cid[5][0] = 5;
cid[6][0] = 10;
cid[7][0] = 20;
cid[8][0] = 100;
change['status'] = "CLOSED"
change['change'] = reversedcurrConvert(cid)
return change
}
console.info(checkCashRegister(19.5, 20, [
["PENNY", 0.5],
["NICKEL", 0],
["DIME", 0],
["QUARTER", 0],
["ONE", 0],
["FIVE", 0],
["TEN", 0],
["TWENTY", 0],
["ONE HUNDRED", 0]
]));
чем i=0 отличается от i=1, i=2... и т. д., то есть почему i=0 не работает, а другие работают? i=1/2/3... не задание?
Это тоже все задания (и в равной степени проблема). Я предлагаю прочитать учебник (-nother?), например. javascript.info
if (i=0)
говорит if (0)
, так как используйте назначение, и, таким образом, он говорит if (false)
, поэтому он никогда ни к чему не приводит и получает «пропущено».
Первая проблема, которую вы должны использовать в своем цикле i == x
вместо i = x
. Вторая проблема вы делаете много лишнего if
. Вот пример того, как вы можете легко установить значение, используя объект в качестве карты.
function reversedcurrConvert(cid) {
const banknoteName = {
0: 'PENNY',
1: 'NICKEL',
2: 'DIME',
3: 'QUARTER',
4: 'ONE',
5: 'FIVE',
6: 'TEN',
7: 'TWENTY',
8: 'ONE HUNDRED',
};
for (let i = 0; i < cid.length; ++i) {
cid[i][0] = banknoteName[i];
}
return cid;
}
function checkCashRegister(price, cash, cid) {
let change = {}
cid[0][0] = 0.01;
cid[1][0] = 0.05;
cid[2][0] = 0.1;
cid[3][0] = 0.25;
cid[4][0] = 1;
cid[5][0] = 5;
cid[6][0] = 10;
cid[7][0] = 20;
cid[8][0] = 100;
change['status'] = 'CLOSED';
change['change'] = reversedcurrConvert(cid);
return change
}
console.info(checkCashRegister(19.5, 20, [
["PENNY", 0.5],
["NICKEL", 0],
["DIME", 0],
["QUARTER", 0],
["ONE", 0],
["FIVE", 0],
["TEN", 0],
["TWENTY", 0],
["ONE HUNDRED", 0]
]));
P.S. Я действительно не совсем понял, почему вы сначала вводите числа в cid[x][0]
, а затем устанавливаете string
с помощью цикла for
. Когда вы передаете cid
в функцию reversedcurrConvert
, вы передаете указатель на этот массив, а не на его копию, если вы не знаете. Из-за этого, когда вы меняете значение в своей функции reversedcurrConvert
, вы также меняете значения cid
в функции checkCashRegister
. Таким образом, вы можете установить эти строки без зацикливания, как вы делаете это перед вызовом функции reversedcurrConvert
Я не могу поверить, что пропустил это. Большое спасибо, что указали на мое слепое пятно.
@tommy-ling Был рад помочь!
i=0
— это присваивание, а не сравнение.