下面的JavaScript代码[jsfiddle]:副本以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);?
结果:
除去
master1父母前:2
master2父母:2
master1家长1儿童:2
master2家长2儿童:2
删除后
master1父母:1
master2父母:2
master1父1名儿童:1个
master2父2名儿童:在删除之前:1
我希望(和必要性)本
master1父母:2
master2父母:2
master1父母1儿童:2
master2父母2儿童:1
master2父母:2
master1父1名儿童:1个
master2父2名儿童:2
去除
master1父母后2 < - 差异
我在做什么错? 它看起来像孩子们指的是相同的数组,我也没有切片的初始儿童数组(它按照预期与父数组一起工作)。
为什么不使用'.splice()'从现有数组中删除元素? – jfriend00 2012-04-14 13:05:25
这不能解决原来的问题。考虑masterlist [0] .parents [0] .children.push({name:“child3”});两者都再次更新。 – 2012-04-14 13:46:11
这将是很好的知道你想要做什么总体与这个脚本。 Jus粘贴代码和期望的输出不能帮助我们读取代码 – Tamil 2012-04-14 17:13:09