如何从数组对象中删除元素

How to remove elements from object of arrays

我使用一个数组对象,我想删除其中一个数组中的特定值。

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

删除所有数组中的值!!!不仅在“Ven”中... 如何删除特定数组中的单个元素而不影响对象的其他数组?

感谢

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

你的问题与内存引用有关,当你将两个变量等同时,你不是在创建另一个相同的对象,而是将对象引用从一个变量复制到另一个变量,所以如果你修改 X 你会改变 Y,要更正,您可以使用扩展运算符 [...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";

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

然后用更新后的 filteredData

替换 Ven 对象

presenti[giorno] = filteredData

当您构建对象时,所有数组都具有相同的引用,因此您需要 slice medici 每个对象值。看看 Copy array by value

现在你可以使用方法了。

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)