den folgenden JavaScript-Code [jsfiddle]:Kopien von verschachtelten Arrays und Referenzen in Javascript
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
var masterlist = [{
name: "Master1"},
{
name: "Master2"}];
var parentlist = [{
name: "Parent1"},
{
name: "Parent2"}];
var childlist = [{
name: "Child1"},
{
name: "Child2"}];
for (var i = 0; i < masterlist.length; i++) {
var master = masterlist[i];
master.parents = parentlist.slice();
for (var j = 0; j < master.parents.length; j++) {
var parent = master.parents[j];
parent.children = childlist.slice();
}
}
console.log("before removing")
console.log("master1 parents: " + masterlist[0].parents.length);
console.log("master2 parents: " + masterlist[1].parents.length);
console.log("master1 parent 1 childrens: " + masterlist[0].parents[0].children.length);
console.log("master2 parent 2 childrens: " + masterlist[1].parents[1].children.length);
masterlist[0].parents.remove(0);
masterlist[0].parents[0].children.remove(0);
console.log("after removing")
console.log("master1 parents: " + masterlist[0].parents.length);
console.log("master2 parents: " + masterlist[1].parents.length);
console.log("master1 parent 1 childrens: " + masterlist[0].parents[0].children.length);
console.log("master2 parent 2 childrens: " + masterlist[1].parents[1].children.length);?
Ergebnisse in:
vor dem Entfernen
master1 Eltern: 2
master2 Eltern: 2
Master1 Eltern 1 Kinder: 2
Master2 Eltern 2 Kinder: 2
nach dem Entfernen
master1 Eltern: 1
master2 Eltern: 2
master1 Mutter 1 Kinder: 1
master2 Eltern 2 Kinder: 1
Ich würde erwarten (und Notwendigkeit) diese:
vor dem Entfernen
master1 Eltern: 2
master2 Eltern: 2
master1 Mutter 1 Kinder: 2
master2 Elternteil 2 Kinder: 2
nach dem Entfernen
master1 Eltern: 1
master2 Eltern: 2
master1 Mutter 1 Kinder: 1
master2 Eltern 2 Kinder: 2 < - Differenz
Was mache ich falsch ? Es sieht so aus, als ob die Childs auf das gleiche Array verweisen, auch habe ich das anfängliche Children-Array geschnitten (was mit dem Eltern-Array wie erwartet funktioniert hat).
Warum verwenden Sie '.splice()' nicht, um Elemente aus einem vorhandenen Array zu entfernen? – jfriend00
Das würde das ursprüngliche Problem nicht beheben. Betrachte Masterlist [0] .parents [0] .children.push ({name: "child3"}); Beide sind wieder aktualisiert. –
Es wäre gut zu wissen, was Sie insgesamt mit diesem Skript zu tun versuchen. Das Einfügen des Codes und der erwarteten Ausgabe kann uns beim Lesen des Codes – Tamil