Javascript для функции цикла не работает в другой функции

Функция "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 — это присваивание, а не сравнение.
ASDFGerte 23.03.2022 03:24

чем i=0 отличается от i=1, i=2... и т. д., то есть почему i=0 не работает, а другие работают? i=1/2/3... не задание?

tommy-ling 23.03.2022 03:42

Это тоже все задания (и в равной степени проблема). Я предлагаю прочитать учебник (-nother?), например. javascript.info

ASDFGerte 23.03.2022 03:57
"чем i=0 отличается от .." ... if (i=0) говорит if (0), так как используйте назначение, и, таким образом, он говорит if (false), поэтому он никогда ни к чему не приводит и получает «пропущено».
GetSet 23.03.2022 04:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Первая проблема, которую вы должны использовать в своем цикле 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 23.03.2022 15:10

@tommy-ling Был рад помочь!

EzioMercer 23.03.2022 15:45

Другие вопросы по теме