簡體   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