Javascript拼接数组不规则
Spliced array in Javascript is irregular
我正在尝试在单击某个元素时拼接一个数组。当我 console.log 新数组时,它是不规则的,有时会删除错误的数组元素,并且永远不会删除最后一个索引。有人对此有很好的解释吗?
var container = document.getElementById('container'),
notDone = document.getElementsByClassName('notDone'),
deleting = document.getElementsByClassName('delete'),
div,
remove,
i,
toDo = [
'One',
'Two',
'öäå'],
for(i = 0; i < toDo.length; i++){
div = document.createElement('div');
div.innerHTML = toDo[i];
div.className = 'notDone';
remove = document.createElement('div');
remove.innerHTML = '<p>Remove</p>';
remove.setAttribute("data-id", i);
remove.className = 'delete';
container.appendChild(div);
div.appendChild(remove);
notDone[i].addEventListener('click', function(){
if(this.classList.contains('notDone')){
this.className = 'done';
}else{
this.className = 'notDone';
}
});
deleting[i].addEventListener('click', function(event){
event.stopPropagation();
var shouldDelete = this.getAttribute("data-id");
console.log('va' + shouldDelete);
toDo.splice(shouldDelete, 1);
this.parentNode.remove();
console.log(toDo);
});
}
var check = document.getElementById('check');
check.addEventListener('click', function(){
console.log(toDo + ' checking array')
});
it sometimes removes the wrong array element
您面临的问题是 data-id
存储的是固定索引,而 toDo
数组是可变的。当您从数组中删除一个元素时,它后面的所有索引都将失效。例如,当你 .splice(0, 1)
时,你不能再做 splice(2, 1)
因为数组只剩下两个项目。
the last index will never be removed.
如果您首先单击最后一个元素,它会。
你可以做的是
- 不从
toDo
数组中删除索引(并切割整个数组),而只是将数组值设置为 null
;或
- 不存储原始索引,而是存储要删除的值,并在每次删除元素时在当前数组中搜索它们(使用
indexOf
)
我正在尝试在单击某个元素时拼接一个数组。当我 console.log 新数组时,它是不规则的,有时会删除错误的数组元素,并且永远不会删除最后一个索引。有人对此有很好的解释吗?
var container = document.getElementById('container'),
notDone = document.getElementsByClassName('notDone'),
deleting = document.getElementsByClassName('delete'),
div,
remove,
i,
toDo = [
'One',
'Two',
'öäå'],
for(i = 0; i < toDo.length; i++){
div = document.createElement('div');
div.innerHTML = toDo[i];
div.className = 'notDone';
remove = document.createElement('div');
remove.innerHTML = '<p>Remove</p>';
remove.setAttribute("data-id", i);
remove.className = 'delete';
container.appendChild(div);
div.appendChild(remove);
notDone[i].addEventListener('click', function(){
if(this.classList.contains('notDone')){
this.className = 'done';
}else{
this.className = 'notDone';
}
});
deleting[i].addEventListener('click', function(event){
event.stopPropagation();
var shouldDelete = this.getAttribute("data-id");
console.log('va' + shouldDelete);
toDo.splice(shouldDelete, 1);
this.parentNode.remove();
console.log(toDo);
});
}
var check = document.getElementById('check');
check.addEventListener('click', function(){
console.log(toDo + ' checking array')
});
it sometimes removes the wrong array element
您面临的问题是 data-id
存储的是固定索引,而 toDo
数组是可变的。当您从数组中删除一个元素时,它后面的所有索引都将失效。例如,当你 .splice(0, 1)
时,你不能再做 splice(2, 1)
因为数组只剩下两个项目。
the last index will never be removed.
如果您首先单击最后一个元素,它会。
你可以做的是
- 不从
toDo
数组中删除索引(并切割整个数组),而只是将数组值设置为null
;或 - 不存储原始索引,而是存储要删除的值,并在每次删除元素时在当前数组中搜索它们(使用
indexOf
)