[英]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 中, Array
和Objects
被稱為引用類型。 [在此處了解更多信息]。 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.