Warum entfernt .splice dasselbe Element aus einem anderen Objektarray? [Duplikat]JavaScript

Javascript-Forum
Guest
 Warum entfernt .splice dasselbe Element aus einem anderen Objektarray? [Duplikat]

Post by Guest »

Ich habe zwei Variablen, die ein Objekt speichern. Eine der Eigenschaften des Objekts ist ein anderes Objekt (Array).

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

Code: Select all

{key:"Apprentices", label:"Apprentices", children:[
{key:"1", label:"Linda"},
{key:"2", label:"George"}
]}
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:

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)
Hier ist mein vollständiger Code zum Entfernen einer Eigenschaft der obersten Ebene, die nur eine Variable korrekt entfernt:

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)
Konsolenprotokolle für jedes:
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]
2 – wird korrekt von einem entfernt

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
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post