js, fundamental

Не могу найти ошибку

let a = 'AAAABBBCCDAABBB';
let uniqueInOrder = function(iterable) {
  let resultArray = [];
  for(let i = 0; i < iterable.length; i++) {
    if(i === 0) resultArray.push(iterable[0]) 
    if(iterable[i] !== resultArray[i - 1]) {
      console.log(resultArray, iterable[i - 1], resultArray[i - 1], resultArray[0]);
      resultArray.push(iterable[i]);
    }
  }
  return resultArray;
}
uniqueInOrder(a); 

Результат вывода в консоль:

["A"] "A" undefined "A"
VM858:7 (2) ["A", "A"] "A" undefined "A"
VM858:7 (3) ["A", "A", "A"] "A" undefined "A"
VM858:7 (4) ["A", "A", "A", "B"] "B" undefined "A"
VM858:7 (5) ["A", "A", "A", "B", "B"] "B" undefined "A"
VM858:7 (6) ["A", "A", "A", "B", "B", "B"] "B" undefined "A"
VM858:7 (7) ["A", "A", "A", "B", "B", "B", "C"] "C" undefined "A"
VM858:7 (8) ["A", "A", "A", "B", "B", "B", "C", "C"] "C" undefined "A"
VM858:7 (9) ["A", "A", "A", "B", "B", "B", "C", "C", "D"] "D" undefined "A"
VM858:7 (10) ["A", "A", "A", "B", "B", "B", "C", "C", "D", "A"] "A" undefined "A"
VM858:7 (11) ["A", "A", "A", "B", "B", "B", "C", "C", "D", "A", "A"] "A" undefined "A"
VM858:7 (12) ["A", "A", "A", "B", "B", "B", "C", "C", "D", "A", "A", "B"] "B" undefined "A"
VM858:7 (13) ["A", "A", "A", "B", "B", "B", "C", "C", "D", "A", "A", "B", "B"] "B" undefined "A"
(14) ["A", "A", "A", "B", "B", "B", "C", "C", "D", "A", "A", "B", "B", "B"]

Почему результат вызова resultArray[i-1] - undefined на 2ой итерации цикла, при том что элемент массива с индексом 0 присутствует после 1ой итерации?


Ответы (1 шт):

Автор решения: Aziz Umarov

Думаю вы так хотели?

let a = 'AAAABBBCCDAABBB';
let uniqueInOrder = function(iterable) {
  let resultArray = [];
  for(let i = 0; i < iterable.length; i++) {
    if(i === 0) { resultArray.push(iterable[0]) }
    else if(iterable[i] !== resultArray[resultArray.length - 1]) {
      console.log(resultArray, iterable[i - 1], resultArray[resultArray.length - 1], resultArray[0]);
      resultArray.push(iterable[i]);
    }
  }
  return resultArray;
}
uniqueInOrder(a);

Дело в том что у вас длина resultArray не равна итерации

→ Ссылка