我想通过 splice() 从数组中删除一个对象但不能正常工作

Posted

技术标签:

【中文标题】我想通过 splice() 从数组中删除一个对象但不能正常工作【英文标题】:I want remove an object from array by splice() but not working properly 【发布时间】:2021-10-06 13:49:37 【问题描述】:

我有一个array 我想从中删除一个对象, 我试着用splice()写这个, 但是当我找到它并 splice 时,我的代码会删除所有对象,除了找到的对象。

这是我的 javascript 代码: On 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;

        

    

【问题讨论】:

.splice() 修改数组并返回删除的元素。只是不要将它的返回值分配给MyArr 如果您要更改问题的代码之后有人已经为旧版本添加了答案,至少通知他们该更改。但你的修改一开始就不应该是必要的...... 【参考方案1】:

Array.prototype.splice()

您必须将 deleteCount 指定为 1。 splice的返回值是被删除的元素(不要重新赋值给MrArr
MyArr.splice(indexItem, 1);

【讨论】:

你应该写MyArr.splice(indexItem, 1);而不是MyArr = MyArr.splice(indexItem,1);【参考方案2】:

您可以使用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-wrappermin-height: 100%!important; top: 0

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

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

result 数组包含除 ID 为 139 的项目之外的所有项目。

【讨论】:

我更新了我的问题。我在这里写问题之前写了这段代码。但这是行不通的,删除所有期望的!请再次查看我的代码。 Array.prototype.splice() 从数组中删除项目并返回删除的项目。在您的代码中,当您编写 MyArr = MyArr.splice(index, 1) 时,MyArr 将替换为已删除项目的数组。

以上是关于我想通过 splice() 从数组中删除一个对象但不能正常工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 splice() 从数组中删除匹配条件的项目

删除数组指定的某个元素

js数组删除某个元素

javascript中,知道一个值,如何删除数组中的这个值的元素。

从数组中删除所有某些重复项[重复]

js删除数组中的元素delete和splice的区别