[英]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 中,
Array
和Objects
被称为引用类型。 [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.