You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript实现点击事件删除数组内指定对象(TodoList场景)

Todo List 精准删除对应数组对象的实现方法

现有代码的问题

  • 存入数组的待办对象只有text属性,没有唯一标识,无法区分内容相同的两个任务
  • 删除逻辑中的list[i].num == i判断完全不生效,你从未给待办对象添加过num属性

最优实现方案

给每个待办对象添加唯一标识,绑定删除事件时同步记录当前待办的唯一id,删除时通过id匹配找到对应数组元素即可,不会出现误删问题,完整修改后的JS代码如下:

const input = document.querySelector(".input");
const maindiv = document.querySelector(".maindiv");
const list = []
// 也可以用Date.now()生成唯一id,这里用自增数字更直观
let todoIdCounter = 0

input.addEventListener("keydown", function (e) {
    if (input.value && e.keyCode === 13) {
        const div = document.createElement("div")
        const title = document.createElement("h1")
        const btn = document.createElement("button")

        title.textContent = input.value
        btn.textContent = "remove"
        // 新增待办时生成唯一id
        const currentTodoId = todoIdCounter++
        list.push({ 
            text: input.value,
            id: currentTodoId
        })
        
        btn.addEventListener("click", function (e) {
            // 匹配id找到对应待办的数组下标
            const targetIndex = list.findIndex(todo => todo.id === currentTodoId)
            // 匹配到就删除数组元素
            if (targetIndex !== -1) {
                list.splice(targetIndex, 1)
            }
            // 删除DOM节点
            e.target.parentElement.remove()
            // 可打开下方注释验证数组删除结果
            // console.log(list)
        })

        div.appendChild(title)
        div.appendChild(btn)
        maindiv.appendChild(div)
        // 新增后清空输入框,优化使用体验
        input.value = ''
    }
})

方案优势

  • 就算存在多个内容完全相同的待办、或者数组顺序发生变动,也能100%精准删除对应元素,不会出现误删
  • 不需要额外给DOM添加自定义属性,逻辑简洁易维护

内容的提问来源于stack exchange,提问作者user17302724

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:06:05