首页 > 解决方案 > 我想通过 splice() 从数组中删除一个对象但不能正常工作

问题描述

我有一个array 我想从中删除一个对象,我尝试通过 编写这个splice(),但是当我找到它并拼接它时,我的代码删除了所有对象,除了找到的对象。

这是我的 JavaScript 代码: 在 jsfiddle

var MyArr = [{
    "id": "139",
    "count": 2,
  },
  {
    "id": "138",
    "count": 2,
  },
  {
    "id": "196",
    "count": 1,
  },
  {
    "id": "122",
    "count": 1,
  }
]

console.log(MyArr);
   var linkItemId = parent.find("a").attr("data-menu-id");
   var indexItem = MyArr.findIndex(x => x.id == linkItemId);
    
    for (var i = 0; i < MyArr.length; i++) {
        if (linkItemId == MyArr[i].id) {
            //var indexItem = arr[i].index;
            
            MyArr = MyArr.splice(indexItem,1);

            break;

        }

    }

标签: javascriptjqueryarraysarraylistarray-splice

解决方案


您可以findIndex()用于从阵列中查找可移动项目,然后应用拼接。

var MyArr=[{id:"139",count:2,bgColor:"rgb(104, 213, 247)",link:"/inv/invmonitoringexpertgroupraghabehplanresult/index",icon:"atis-icon icon-bizPlan",name:"بررسی طرح های اقتصادی",sysname:"طرحهای اقتصادی"},{id:"138",count:2,bgColor:"rgb(104, 213, 247)",link:"/inv/invmonitoringexpertgroup/index",icon:"atis-icon icon-bizPlan",name:"کارشناسان نظارت بر طرح های اقتصادی",sysname:"طرحهای اقتصادی"},{id:"196",count:1,bgColor:"rgb(153, 132, 255)",link:"/rnt/rntrequestevaluation/report",icon:"atis-icon icon-rent",name:"گزارش کارشناسی ها",sysname:"عملیات اجارات"},{id:"122",count:1,bgColor:"rgb(218, 111, 227)",link:"/cnt/cntplan/index",icon:"atis-icon icon-contract",name:"تعریف طرح",sysname:"سرمایه گذاری و اطلاعات قراردادها"}];

const itemIndex = MyArr.findIndex(item => item.id === '139');
if (itemIndex > -1) {
  MyArr.splice(itemIndex, 1)
}

console.log(MyArr);
.as-console-wrapper{min-height: 100%!important; top: 0}

您也可以使用该Array.prototype.filter()方法删除该项目。过滤器将返回一个新数组而不修改原始MyArr.

const result = MyArr.filter(item => item.id !== '139');

result数组包含除了具有 id 的项目之外的所有项目139


推荐阅读