Я динамически нарезаю массив, и я могу получить требуемую функциональность, просто удалив последний элемент с помощью arr.pop()
, но я хочу точно знать, почему мой цикл while
добавляет это в мой массив, когда он нарушает мойусловный.
slices(num){
let arr = [this.digits.slice(0, num)]
let i = 0
if (this.digits.length < num){
throw new Error('Slice size is too big.')
} else {
while (arr[i].length === num){
i++
arr.push(this.digits.slice(i, num + i))
}
// arr.pop() - removed for testing
return arr
}
}
Вот пример.Допустим, мы хотим нарезать этот массив:
this.digits = [ 3, 1, 0, 0, 1 ]
В идеале наш вывод будет выглядеть следующим образом:
[3, 1, 0], [1, 0, 0], [0, 0, 1]]
С моим текущим кодом и без использования arr.pop()
мой алгоритм будетпоследовательно проскальзывать в дополнительной итерации среза, которая имеет меньшую длину, чем то, что запрашивает мое условное выражение (в данном случае num == 3
)
Это будет мой вывод:
[[3, 1, 0], [1, 0, 0], [0, 0, 1], [0, 1]]
Я знаюЕсть много способов сделать это, но для этого я хотел бы сохранить целостность моего кода, поэтому было бы здорово использовать решение, использующее мою реализацию: D
РЕДАКТИРОВАТЬ: я понимаю, почему последний элементдобавляется.Поскольку элемент прежде выполняет условное условие (его длина равна num), он переходит к следующей итерации, но как я справляюсь с ним красноречиво, без использования .pop ()
РЕДАКТИРОВАТЬ: Спасибо всем за ответы!Кажется, что все они работают, но реализация Питера Б. была очень чистой, особенно учитывая, что он изменил для меня всего несколько строк, и это сработало как шарм.Еще раз спасибо!