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);?
結果で:
MASTER1親を除去する前に:2
MASTER2両親:2
マスター1親1子ども:2
master2親2子ども:2
削除後
人の MASTER1両親:1
MASTER2両親:2
MASTER1親1人の子供:1つの
マスター2の親2人の子供:取り外す前に:1
が、私はこれを期待(および必要)です
MASTER1両親:2
MASTER2両親:2
MASTER1親1人の子供:2
マスター2の親2子供:1
MASTER2両親:2
MASTER1親1人の子供:1つの
マスター2の親2人の子供:2
MASTER1両親除去した後の2 < - 私が間違って何をやっているの違いを
? 子供が同じ配列を参照しているように見えますが、私は初期の子配列をスライスしました(これは期待通りに親配列で機能しました)。
既存の配列から要素を削除するのに '.splice()'を使わないのはなぜですか? – jfriend00
これは元の問題を解決しません。 masterlist [0] .parents [0] .children.push({name: "child3"})を考慮してください。両方が再び更新されます。 –
このスクリプトを使って全体的に何をしようとしているのかは分かります。 Jusがコードと期待される出力を貼り付けることで、コード – Tamil