使用索引从对象数组中删除对象? [复制]

Posted

技术标签:

【中文标题】使用索引从对象数组中删除对象? [复制]【英文标题】:Remove an object from an object array using index? [duplicate] 【发布时间】:2022-01-19 12:13:00 【问题描述】:

我想从颜色为红色的数组中删除第三个对象。我想使用索引删除它,因为某些对象可能没有 _id 属性,而其他属性在它们之间不是唯一的。

[
    color: "BLUE"
     imageURL: "/uploads/image-1639632524718.png"
     inStock: 4
     _id: "61b9bff23b027548ed2f737e"
  ,
    color: "green"
     imageURL: "/uploads/image-1639561204805.png"
     inStock: 6
     _id: "61ba098f3b027548ed2f737f"
  ,
    color: "Red"
     imageURL: "/uploads/image-1639647424471.png"
     inStock: 6
  ,
    color: "Star Light"
     imageURL: "/uploads/image-1639650244179.png"
     inStock: 60
  
]  

删除对象数组后会是什么样子。

[
    color: "BLUE"
     imageURL: "/uploads/image-1639632524718.png"
     inStock: 4
     _id: "61b9bff23b027548ed2f737e"
  ,
    color: "green"
     imageURL: "/uploads/image-1639561204805.png"
     inStock: 6
     _id: "61ba098f3b027548ed2f737f"
  ,
    color: "Star Light"
     imageURL: "/uploads/image-1639650244179.png"
     inStock: 60
  
]  

我该怎么做?

【问题讨论】:

“我想从颜色为红色的数组中删除第三个对象” - 如果“第三个”对象不是“红色”怎么办? “我想使用索引删除它,因为某些对象可能没有 _id 属性...” - _id 与此有何相关性? “...其他属性在它们之间不是唯一的。” - 什么?这有什么关系? 我的意思是我想使用索引@Andreas 删除对象 不回答我的任何问题。为什么要索引?为什么不只是 .filter() 的颜色? 因为许多对象可以具有相同的颜色,但我只想删除其中一个,而不是所有对象都具有相同的颜色。 @安德烈亚斯 如果“3rd”对象不是“红色”怎么办? 【参考方案1】:

这个splice 函数可以做到这一点

someArray.splice(index, 1)

https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/Array/splice

【讨论】:

【参考方案2】:

使用Array.splice() 方法从指定位置移除项目。

const list = [
    color: "BLUE",
     imageURL: "/uploads/image-1639632524718.png",
     inStock: 4,
     _id: "61b9bff23b027548ed2f737e"
  ,
    color: "green",
     imageURL: "/uploads/image-1639561204805.png",
     inStock: 6,
     _id: "61ba098f3b027548ed2f737f"
  ,
    color: "Red",
     imageURL: "/uploads/image-1639647424471.png",
     inStock: 6
  ,
    color: "Star Light",
     imageURL: "/uploads/image-1639650244179.png",
     inStock: 60
  
];

const remove = (arr, index) => arr.splice(index, 1);
remove(list, 2);
console.log("list after removal: ", list);

【讨论】:

【参考方案3】:

(一旦你修复了你的数据结构 - 它不是一个数组,而且你缺少逗号......)

您可以filter 找出所有不在该索引处的对象。

const data=[color:"BLUE",imageURL:"/uploads/image-1639632524718.png",inStock:4,_id:"61b9bff23b027548ed2f737e",color:"green",imageURL:"/uploads/image-1639561204805.png",inStock:6,_id:"61ba098f3b027548ed2f737f",color:"Red",imageURL:"/uploads/image-1639647424471.png",inStock:6,color:"Star Light",imageURL:"/uploads/image-1639650244179.png",inStock:60];

const out = data.filter((obj, i) => i !== 2);

console.log(out);

【讨论】:

以上是关于使用索引从对象数组中删除对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在不知道对象索引的情况下从数组中删除对象?

如何使用flutter从firestore中删除/更新数组对象中的指定索引

根据索引从数组中删除对象

从对象数组中删除最后一个对象。 [复制]

从过滤数组和主数组中删除相同的对象

如何从数组中删除特定对象? [复制]