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

JavaScript中如何删除数组内GraderId等于指定值的对象?

问题根因分析
  • $.each 回调内 this 指向错误:内层遍历逻辑里的 this 指向当前遍历的数组元素,不是外层的 <select> 元素,无法正确拿到选中的目标GraderId
  • 无合法的数组删除逻辑:你写的 r.removeItem 既不是属性也不是可执行方法,不会产生任何删除效果
  • 边遍历数组边删除元素会导致索引偏移,漏检后续元素
  • 你提供的原始数组存在语法错误:第6、7个对象末尾缺少逗号,运行时会直接报错
  • 存在DOM ID不匹配问题:ajax请求后把生成的选项写入了#graderSchools,但你绑定双击事件的是#schoolGraders,会导致事件绑定完全无效
实现方案

最简单稳妥的方式是使用数组原生的filter方法,直接过滤出不符合删除条件的元素替换原数组即可,不需要处理索引偏移问题。

完整可运行代码示例

$(function() {
  $("#schoolGraders").on("dblclick", function() {
    // 拿到选中的待删除GraderId,多选模式下val返回数组,统一转为数字格式
    const toDeleteIds = $(this).val().map(Number);
    // 过滤数组,保留GraderId不在待删除列表中的元素
    array = array.filter(item => !toDeleteIds.includes(item.GraderId));
    // 可选操作:同步删除页面下拉框中对应的选项
    $(this).find('option:selected').remove();
  });
});

补充说明

  • 如果你的<select>是单选模式,直接写const toDeleteId = Number($(this).val()),过滤条件改为item.GraderId !== toDeleteId即可
  • 先修正原始数组的语法错误,给缺少逗号的对象补全逗号
  • 检查你的ajax逻辑的DOM ID:如果选项要写入#schoolGraders,把ajax done回调里的$("#graderSchools").html(iteem)改为$("#schoolGraders").html(iteem),否则事件绑定不会生效

内容的提问来源于stack exchange,提问作者M.imp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:54:03