JS массив перезаписывается болевыми значениями при чтении - PullRequest
0 голосов
/ 03 августа 2020

Впервые здесь, и я ужасный разработчик, так что заранее простите мои, возможно, многочисленные ошибки :)

вот моя проблема: я пытаюсь сделать программу, которая проверяет пропорции каждого число от 1 до 9 в массиве (я проверяю закон Бенфорда), для этого я создал 9 разных переменных (в основном nX, где X = 1-9), я читаю свой массив с a for l oop, и увеличивая каждую из моих переменных каждый раз, когда найдено соответствующее число (если array [i] = X, nX ++), и затем я консоль регистрирую свой массив. Проблема в том, что в этом журнале консоли все значения в моем массиве установлены на «1», чего не было до выполнения этих нескольких строк. Так что я не совсем уверен, что происходит, но предполагаю, что мои проверки «if» возвращают «true» и меняют значение элементов массива на 1, чтобы отразить это. Итак, мой вопрос: любой из вас, мудрые волшебники, знает, что я делаю неправильно и как уберечь мои данные от повреждения этой операцией?

вот какой-то код:

for (i = 0; i < benfordArrayProcessed.length; i++) {
  if (benfordArrayProcessed[i] = 1) {

    n1++;

  } else if (benfordArrayProcessed[i] = 2) {

    n2++;

  } else if (benfordArrayProcessed[i] = 3) {

    n3++;
  }
  [...]

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Помимо использования ==, вы также можете выбрать go для оператора switch:

for (i = 0; i < benfordArrayProcessed.length; i++) {
  switch (benfordArrayProcessed[i]) {
    case 1:
      n1++;
      break;
    case 2:
      n2++;
      break;
    case 3:
      n3++;
      break;
    [...]
  }
}

Или используйте объект с клавишами для увеличения числа (немного больше сложно и зависит от того, как вы хотите реализовать остальную часть своего кода):

const n = {
  1: 0,
  2: 0,
  3: 0,
};

for (i = 0; i < benfordArrayProcessed.length; i++) {
  const num = benfordArrayProcessed[i];
  n[num]++;
}
0 голосов
/ 03 августа 2020

В вашем выражении вам нужно использовать логическое выражение вместо присваивания, например if (benfordArrayProcessed[i] == 1). Значения в ошибке перезаписываются из-за присвоения int самого первого оператора, и поэтому вы видите 1 для всех элементов.

...