如何从数组对象中删除元素
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 中,Array
和 Objects
被称为引用类型。 [在此处了解更多信息]。1
要解决您的问题,您可以这样做:
giorno="Ven";
nome="Person1";
首先从数组中过滤掉Person1
。
const 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)
我使用一个数组对象,我想删除其中一个数组中的特定值。
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 中,Array
和 Objects
被称为引用类型。 [在此处了解更多信息]。1
要解决您的问题,您可以这样做:
giorno="Ven";
nome="Person1";
首先从数组中过滤掉Person1
。
const 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)