简体   繁体   English

如何从 arrays 的 object 中删除元素

[英]How to remove elements from object of arrays

I use an object of arrays and I want to delete a specific value in 1 of the 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; }

I obtain:我得到:

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"]

Now I want to delete specific value in specific array:现在我想删除特定数组中的特定值:

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

It delete the value in all the arrays... Not only in the "Ven" one?.. How can I delete a single one element in a specific array not affecting the other arrays of the object?它删除了所有 arrays 中的值......不仅在“Ven”一个?..我怎样才能删除特定数组中的单个元素而不影响对象的另一个 arrays?

Thx谢谢

 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);

Your problem has to do with memory reference, when you equate two variables you are not creating another identical object but copying the object reference from one variable to another, so if you modify X you change Y , to correct you can create another Array using the spread operator [...medici]您的问题与 memory 参考有关,当您将两个变量等同起来时,您不会创建另一个相同的Y而是复制X将引用从一个变量更改为另一个,因此如果您可以创建另一个数组传播运算符[...medici]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax 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)

It does so because in JavaScript Array and Objects are known as reference types.这样做是因为在 JavaScript 中, ArrayObjects被称为引用类型。 [Learn more here]. [在此处了解更多信息]。 1 1

To fix your problem you can do this:要解决您的问题,您可以这样做:

giorno="Ven";

nome="Person1";

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

Then replace the Ven object with the updated filteredData然后用更新的filteredData替换Ven object

presenti[giorno] = filteredData

use this function:使用这个 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"}))

When you build your object all the arrays have the same reference so you will need to slice medici on each object value.当您构建 object 时,所有 arrays 都具有相同的参考,因此您需要在每个medici值上对 medici 进行slice Take a look toCopy array by value看看按值复制数组

Now you can use method.现在你可以使用方法了。

 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