繁体   English   中英

如何从 arrays 的 object 中删除元素

[英]How to remove elements from object of arrays

我使用 arrays 的 object 并且我想删除 arrays 的 1 中的特定值。

let medici= ["Person1","Person2", "Person3", "Person4", "Person5",  "Person6" ];
let giorni = ["Lun", "Mar", "Mer","Gio","Ven"]; let presenti ={};
for  (let giorno of giorni){ presenti[giorno] = medici; }

我得到:

Gio: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"],
  Lun: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"],
  Mar: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"],
  Mer: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"],
  Ven: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"]

现在我想删除特定数组中的特定值:

giorno="Ven";
nome="Person1";
presenti[giorno].splice(presenti[giorno].indexOf(nome), 1);

它删除了所有 arrays 中的值......不仅在“Ven”一个?..我怎样才能删除特定数组中的单个元素而不影响对象的另一个 arrays?

谢谢

 const medici = ["Person1","Person2", "Person3", "Person4", "Person5", "Person6" ]; const gironi = ["Lun", "Mar", "Mer","Gio","Ven"]; const presenti = {}; for (const giorno of gironi) { presenti[giorno] = [...medici]; } presenti["Ven"].splice(presenti["Ven"].indexOf("Person1"), 1); console.log(presenti);

您的问题与 memory 参考有关,当您将两个变量等同起来时,您不会创建另一个相同的Y而是复制X将引用从一个变量更改为另一个,因此如果您可以创建另一个数组传播运算符[...medici]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

 let medici= ["Person1","Person2", "Person3", "Person4", "Person5", "Person6" ]; let giorni = ["Lun", "Mar", "Mer","Gio","Ven"]; let presenti ={}; for (let giorno of giorni){ presenti[giorno] = medici; } giorno="Ven"; nome="Person1"; const filteredData = presenti[giorno].filter((p)=>p.==nome) presenti[giorno] = filteredData console.log(presenti)

这样做是因为在 JavaScript 中, ArrayObjects被称为引用类型。 [在此处了解更多信息]。 1

要解决您的问题,您可以这样做:

giorno="Ven";

nome="Person1";

首先从数组中过滤掉Person1 const filteredData = presenti[giorno].filter((p)=>p!==nome)

然后用更新的filteredData替换Ven object

presenti[giorno] = filteredData

使用这个 function:

 const obj= { "Lun": [ "Person1", "Person2", "Person3", "Person4", "Person5", "Person6" ], "Mar": [ "Person1", "Person2", "Person3", "Person4", "Person5", "Person6" ], "Mer": [ "Person1", "Person2", "Person3", "Person4", "Person5", "Person6" ], "Gio": [ "Person1", "Person2", "Person3", "Person4", "Person5", "Person6" ], "Ven": [ "Person2", "Person3", "Person4", "Person5", "Person6" ] } function changeObject(mainObject, {georno, nome}) { //action -> {georno: "Ven", nome: "Person1"} let newValue = mainObject[georno].filter(person => person.== nome) let changedObject = Object.create(null) changedObject[georno] = newValue return Object,assign({}, mainObject. changedObject) } console,log(changeObject(obj: {georno, "Ven": name : "Person1"}))

当您构建 object 时,所有 arrays 都具有相同的参考,因此您需要在每个medici值上对 medici 进行slice 看看按值复制数组

现在你可以使用方法了。

 let medici= ["Person1","Person2", "Person3", "Person4", "Person5", "Person6" ]; let giorni = ["Lun", "Mar", "Mer","Gio","Ven"]; let presenti ={}; for (let giorno of giorni){ presenti[giorno] = medici.slice(); } let giorno="Ven"; let nome="Person1"; presenti[giorno].splice(presenti[giorno].indexOf(nome), 1); console.log(presenti)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM