Javascript 从数组中删除所选元素
嗨,我尝试过使用“indexOf”,但似乎我删除了数组的最后一个元素,而不是所选的元素 我如何解决这个问题,所以是我选择的元素被删除,而不是最后或第一个元素 我试过使用“indexOf”我试过。。。。我知道如何删除和元素,但现在元素的位置,我不知道如何删除Javascript 从数组中删除所选元素,javascript,Javascript,嗨,我尝试过使用“indexOf”,但似乎我删除了数组的最后一个元素,而不是所选的元素 我如何解决这个问题,所以是我选择的元素被删除,而不是最后或第一个元素 我试过使用“indexOf”我试过。。。。我知道如何删除和元素,但现在元素的位置,我不知道如何删除 function getTodoItems() { for (var i = 0; i < dataArray.length; i++) { if (!dataArray[i].listItem.length)
function getTodoItems() {
for (var i = 0; i < dataArray.length; i++) {
if (!dataArray[i].listItem.length) return;
var itemList = document.getElementById("my-todo-list");
var list = document.createElement("li");
itemList.appendChild(list);
list.innerHTML = dataArray[i].listItem;
var spanItem = document.createElement('span');
spanItem.style.float = 'right';
var myCloseSymbol = document.createTextNode('\u00D7');
spanItem.classList.add("closeBtn");
spanItem.appendChild(myCloseSymbol);
listItems[i].appendChild(spanItem);
/////////////////////////////////////////////////////////////////////////////
close[i].onclick = function() {
var div = this.parentElement;
div.style.display = "none";
var position = dataArray.indexOf(dataArray[i]); // Fix denne her linje
dataArray.splice(position, 1); // Fix denne her linje
localStorage.setItem("itemListRecord", JSON.stringify(dataArray));
console.log(dataArray);
}
var list = document.getElementsByTagName('li');
list[i].onclick = function() {
this.classList.toggle("checked");
}
}
}
下面是我的代码的外观您可以使用
Array.filter
来过滤不需要的元素
const arr=[1,2,3,4,5];
const result=arr.filter((项)=>项%2==0);
控制台日志(结果)代码>这就是问题所在:
var position=dataArray.indexOf(dataArray[i])代码>
循环运行完成后,i
将始终引用最后一项的索引。例如,此函数看起来可能会打印1、2、3、4、5。实际上,它会打印五次5
。当console.log
部分实际运行时,vari
已经等于5
:
for(var i=0;i<5;++i){setTimeout(function(){console.log(i);},2000)}
^尝试将其粘贴到控制台中
无论如何,要修复它,您需要在数组中找到该项的索引,其中key:value
对匹配需要删除的todo项的文本
close[i].onclick = function(e) {
var div = e.target.parentElement;
var divText = div.childNodes[0].nodeValue; // use this!
div.style.display = "none";
var position = dataArray.findIndex(todo => todo.listItem === divText);
dataArray.splice(position, 1);
localStorage.setItem("itemListRecord", JSON.stringify(dataArray));
}
工作小提琴:
旁注:这也应该改变。在一个不知名的窗口试一下你的小提琴,看看原因
// this is bad... a user may not have anything in their localStorage yet.
var dataArray = [];
dataArray = JSON.parse(localStorage.getItem("itemListRecord"));
// do this instead.
var dataArray = JSON.parse(localStorage.getItem("itemListRecord")) || new Array();
可能重复的也可能重复的不起作用。。。还是最后一个element@OliverHouston你能为我运行的代码提供一个解决方案吗?无论我使用filter indexOf做什么,无论它删除最后一项,你能将代码最小化到相关部分吗?这是你拥有的最新的小提琴吗?当我按下“添加”按钮时,控制台中出现错误,并且没有创建todo列表。我刚刚测试过,它工作正常,使用时小提琴中没有错误。我发现了错误,并修复了您询问的其他错误。看看我编辑过的答案,我确实使用了Array.findIndex()方法。