Удаление последнего элемента массива
не могу понять почему в моем коде удаление происходит только один раз, а при повторном нажатии кнопки удаление не происходит.
var view = {
value: [],
displayValue: function(number) {
var screen = document.getElementById("calc__monitor");
this.value.push(number);
screen.innerHTML = this.value.join("");
}
}
var keyLogger = {
keys: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 8],
parceKey: function(key) {
key = this.keys.indexOf(key);
if (key == 10) {
var lastNum = view.value.length;
view.value.splice((lastNum - 1), 1);
console.log(view.value.length);
view.displayValue();
} else if (key >= 0) {
view.displayValue(key);
}
}
}
function handleKeyPress(eventObj) {
var key = eventObj.keyCode;
console.log(key);
keyLogger.parceKey(key);
}
function init() {
var elem = document.querySelector("body");
elem.addEventListener("keydown", handleKeyPress);
}
window.onload = init;
<div id="calc__monitor"></div>
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Проблема в вызове
view.displayValue();
В этом случае в массив добавляется undefined и при следующем удалении удаляется тоже он.
Для решения достаточно проверить, что переданное значение не undefined, и добавлять только в этом случае.
Также, вместо .splice для удаления последнего элемента проще использовать .pop
var view = {
value: [],
displayValue: function(number) {
var screen = document.getElementById("calc__monitor");
if (number != undefined) {
this.value.push(number);
}
screen.innerHTML = this.value.join("");
}
}
var keyLogger = {
keys: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 8],
parceKey: function(key) {
key = this.keys.indexOf(key);
if (key == 10) {
view.value.pop();
console.log(view.value.length);
view.displayValue();
} else if (key >= 0) {
view.displayValue(key);
}
}
}
function handleKeyPress(eventObj) {
var key = eventObj.keyCode;
console.log(key);
keyLogger.parceKey(key);
}
function init() {
var elem = document.querySelector("body");
elem.addEventListener("keydown", handleKeyPress);
}
window.onload = init;
<div id="calc__monitor"></div>