Warum entfernt .splice dasselbe Element aus einem anderen Objektarray? [Duplikat]
Posted: 12 Jan 2025, 11:29
Ich habe zwei Variablen, die ein Objekt speichern. Eine der Eigenschaften des Objekts ist ein anderes Objekt (Array).
Ich möchte {key:"4", label:"Diane" aus der elements Variable entfernen (mit .splice), aber wenn ich das tue, wird es auch aus der Master Variable entfernt.
Interessanterweise wenn ich eine nicht untergeordnete Eigenschaft entferne, z. B.
Es wird nicht aus der Master Variable entfernt, sondern nur aus der Elements Variable wie beabsichtigt.
In meiner Anwendung kann ich die Master-Variable leider nicht als CONST haben, aber auf jsplayground.dev kann ich das und das ist nicht der Fall einen Unterschied machen.
Hier ist mein vollständiger Code zum Entfernen eines Elements aus der children Eigenschaft, das letztendlich aus beiden Variablen entfernt wird:
Hier ist mein vollständiger Code zum Entfernen einer Eigenschaft der obersten Ebene, die nur eine Variable korrekt entfernt:
Konsolenprotokolle für jedes:
1 – entfernt von beiden:
2 – wird korrekt von einem entfernt
Ich bin JavaScript-Neuling und habe mich schon einmal geärgert, als zwei Variablen aus derselben Quelle gefüllt wurden und wenn sich diese Quelle ändert, ändern sich auch beide Variablen. Aber in diesem Fall sollte es aufgrund von Array.from() und auch CONST nicht passieren, aber mein zweites Beispiel entfernt nicht von beiden.
Da ich wirklich nicht weiterkomme, wäre ich für jede Anleitung sehr dankbar. Vielen Dank.
Code: Select all
const master = [
{key:"Apprentices", label:"Apprentices", children:[
{key:"1", label:"Linda"},
{key:"2", label:"George"}
]},
{key:"Electricians", label:"Electricians", children:[
{key:"3", label:"Kate"},
{key:"4", label:"Diane"}
]}
]
var elements = Array.from(master);
Interessanterweise wenn ich eine nicht untergeordnete Eigenschaft entferne, z. B.
Code: Select all
{key:"Apprentices", label:"Apprentices", children:[
{key:"1", label:"Linda"},
{key:"2", label:"George"}
]}
In meiner Anwendung kann ich die Master-Variable leider nicht als CONST haben, aber auf jsplayground.dev kann ich das und das ist nicht der Fall einen Unterschied machen.
Hier ist mein vollständiger Code zum Entfernen eines Elements aus der children Eigenschaft, das letztendlich aus beiden Variablen entfernt wird:
Code: Select all
const master = [
{key:"Apprentices", label:"Apprentices", children:[
{key:"1", label:"Linda"},
{key:"2", label:"George"}
]},
{key:"Electricians", label:"Electricians", children:[
{key:"3", label:"Kate"},
{key:"4", label:"Diane"}
]}
]
var elements = Array.from(master);
var el = {'name': 3, 'label': 'Kate'}
console.log(elements)
console.log(master) // this is master variable not 'elements' variable
function addRemoveElement(el, addRemove, all) {
if (addRemove === 0) {
// remove
elements.forEach((item) => item.children.forEach((subItem, i) => {
if (subItem.label === el.label) {
item.children.splice(i, 1);
}
}));
}
console.log(elements)
console.log(master) // this is master variable not 'elements' variable
}
addRemoveElement(el, 0)
Code: Select all
const master = [
{key:"Apprentices", label:"Apprentices", children:[
{key:"1", label:"Linda"},
{key:"2", label:"George"}
]},
{key:"Electricians", label:"Electricians", children:[
{key:"3", label:"Kate"},
{key:"4", label:"Diane"}
]}
]
var elements = Array.from(master);
var el = {'key': 'Apprentices', 'label': 'Apprentices'}
console.log(elements)
console.log(master) // this is master variable not 'elements' variable
function addRemoveElement(el, addRemove, all) {
if (addRemove === 0) {
// remove
elements.forEach((item, i) => {
if (item.label === el.label) {
elements.splice(i, 1);
}
});
}
console.log(elements)
console.log(master) // this is master variable not 'elements' variable
}
addRemoveElement(el, 0)
1 – entfernt von beiden:
Code: Select all
(2) [Object, Object]
0: Object
1: Object
key: "Electricians"
label: "Electricians"
children: (2) [Object, Object]
(2) [Object, Object]
0: Object
1: Object
key: "Electricians"
label: "Electricians"
children: (2) [Object, Object]
(2) [Object, Object]
0: Object
1: Object
key: "Electricians"
label: "Electricians"
children: (1) [Object]
(2) [Object, Object]
0: Object
1: Object
key: "Electricians"
label: "Electricians"
children: (1) [Object]
Code: Select all
(2) [Object, Object]
0: Object
1: Object
(2) [Object, Object]
0: Object
1: Object
(1) [Object]
0: Object
(2) [Object, Object]
0: Object
1: Object
Da ich wirklich nicht weiterkomme, wäre ich für jede Anleitung sehr dankbar. Vielen Dank.