Зациклить массив и добавить значения для запуска Javascript

1

Что мне нужно сделать - простая задача - я зацикливаю массив. Когда array[i] === 0; я хочу +1, чтобы start, это будет то же самое для array[i] === 1. Но когда array[i] вернусь (вернуться, где он был мгновение назад) я не хочу +1, чтобы start, и я сделал этот код:

var start = 0;
var array = [0,1,0,0,1,0,0,1];
for (i=0; i < array.length; i ++) {
   if (array[i] === 0) {
      start += 1;
      if (array[i + 1] === 1) {
         start -= 1;
      }
   } 
   else if (array[i] === 1) {
      start += 1;
      if (array[i + 1] === 0) {
         start -= 1;
      }
   }
}
console.log(start)

Но что, если array = [0,1,1,1,0,0,0,1,0,0,0,1]; , если array[i] вернется туда, где это было давно? Я не хочу, чтобы +1 start.

Представьте 0 и 1 как -1 и +1 на диаграмме, поэтому console.log(start) из array = [0,1,1,1,0,0,0,1,0,0,0,1] должно быть 5.

Мой код - это какое-то жесткое кодирование, есть ли у вас идеи, как это исправить? Спасибо за ответы заранее!

Пример из комментариев

[0,1,1,1,0,0,0,1,0,0,0,1] должен давать результат 5; вам нужно представить 0 == -1 и 1 == +1.

Затем массив выглядит как [-1,+1,+1,+1,-1,-1,-1,+1,-1,-1,-1,+1] и начинается с 0, у нас 5 позиций, где я был всего 1 раз.

  • 0
    Если вы используете i < array.length то у вашего array[i + 1] будут проблемы.
  • 0
    пожалуйста, добавьте несколько вариантов использования и желаемый результат. почему вы хотите посчитать изменения 0, 1 или 1, 0, одинаковые значения или только все 1 ?
Теги:

2 ответа

1

Похоже, вам нужно подсчитать изменения значений в массиве. Вам нужно сохранить последнее значение для проверки следующего значения. Если последнее значение и фактическое значение разные, вы получили изменение и должны подсчитать.

function getChanges(array) {
    var count = 0,
        last = array[0],
        i;

    for (i = 1; i < array.length; i++) {
        if (last !== array[i]) {
            count++;
            last = array[i];
        }
    }
    return count;
}

console.log(getChanges([0, 1, 0, 0, 1, 0, 0, 1]));
console.log(getChanges([0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1]));
0

Как отметил @nurdyguy, ваш вызов array[i+1] будет за пределами последнего элемента. Я перевернул сравнение с предыдущим элементом и начал цикл на втором элементе, чтобы противостоять этому.

Кажется, вы вычисляете +=1 независимо от двоичного результата, а только -=1 когда следующий элемент в массиве отличается таким образом, что, по сути, я думаю, что вы имеете противоположность тому, что вы ищете:

var start = 0;
var array = [0,1,0,0,1,0,0,1];

for (i=1; i < array.length; i++) {
  if (array[i] === array[i-1]) {
    start++;
  }
}

Теперь, если вы хотите рассчитать времена, когда элемент изменяется с каждого шага, вы можете просто перевернуть логическое:

var start = 0;
var array = [0,1,0,0,1,0,0,1];

for (i=1; i < array.length; i++) {
  if (array[i] !== array[i-1]) {
    start++;
  }
}

console.log("The result is: " + start) // The result is: 5

Я думаю, что это то, что вам нужно, пожалуйста, уточните, если нет.

Редактировать:

Извиняюсь, я проверил ваш другой массив, и результат был также 5.

Что вы ищете, так это:

var start = 0;
var array = [0,1,1,1,0,0,0,1,0,0,0,1];

for (i=0; i < array.length; i++) {
  start += array[i];
}

console.log("The result is: " + start) // The result is: 5

Если массив из 0 и 1 является только примером, используйте логический:

var start = 0;
var array = [0,1,1,1,0,0,0,1,0,0,0,1];

for (i=0; i < array.length; i++) {
  array[i] == 1 ? ++start : +-start;
}

console.log("The result is: " + start) // The result is: 5

или же:

var start = 0;
var array = [0,1,1,1,0,0,0,1,0,0,0,1];

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

console.log("The result is: " + start) // The result is: 5

Если массив становится [-1,1,1,1,-1,-1,-1,1,-1,-1,-1,1] как вы сказали, не 5, это -3?

  • 0
    результат 5 должен быть из массива = [0,1,1,1,0,0,0,1,0,0,0,1],
  • 0
    вам нужно представить 0 и 1 как -1 и +1 на графике, поэтому console.log (start) из массива = [0,1,1,1,0,0,0,1,0,0,0,1 ] должно быть 5.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню