地图数组中的值在 javascript 中被覆盖
value in array of maps is overwritten in javascript
我写了一个递归函数,它会生成地图并放入一个数组中。
推送新地图时,先前地图中的一个字段被覆盖
var out = new Array();
function fun(results, count, path, current) {
var p = [];
p = path;
p.push(current)
if (typeof(results.NEXT) == 'undefined') {
var result = new Map();
result = {
"TotalCount": count,
"Path": p,
"title": results.name
}
out.push(result)
console.log(out) //each time the old map getting overwritten
} else {
for (var i = 0; i < (results.NEXT.length); i++) {
var curCount = results.NEXT[i].count
fun(results.NEXT[i], count + curCount, path, curCount)
path.pop();
}
}
}
var path = [];
var results = {
name: 'Prdct Dev - Prof 4',
NEXT: [{
name: 'Sales Research - Mgmt 4',
count: 1
},
{
name: 'Distr- Brokers & Agt - Prof 5',
count: 6
}
],
count: 6
}
fun(results, 6, path, 6)
console.log("function excution complete")
console.log(out)
第一个地图路径值被第二个覆盖。
为什么会这样?
如何解决这个问题?
感谢您的帮助!
var p = [];
p = path;
这两行代码有什么意义?您是希望每次迭代都使用相同的 path
,还是希望函数的每次迭代都有自己的路径?
它的编码方式与编写 var p = path;
相同,并且每次迭代都将其推入然后弹出。
如果要为 out
的每个元素制作数组副本,请使用以下代码中的 slice
执行此操作:
result = {
"TotalCount": count,
"Path": p.slice(),
"title": results.name
}
我写了一个递归函数,它会生成地图并放入一个数组中。 推送新地图时,先前地图中的一个字段被覆盖
var out = new Array();
function fun(results, count, path, current) {
var p = [];
p = path;
p.push(current)
if (typeof(results.NEXT) == 'undefined') {
var result = new Map();
result = {
"TotalCount": count,
"Path": p,
"title": results.name
}
out.push(result)
console.log(out) //each time the old map getting overwritten
} else {
for (var i = 0; i < (results.NEXT.length); i++) {
var curCount = results.NEXT[i].count
fun(results.NEXT[i], count + curCount, path, curCount)
path.pop();
}
}
}
var path = [];
var results = {
name: 'Prdct Dev - Prof 4',
NEXT: [{
name: 'Sales Research - Mgmt 4',
count: 1
},
{
name: 'Distr- Brokers & Agt - Prof 5',
count: 6
}
],
count: 6
}
fun(results, 6, path, 6)
console.log("function excution complete")
console.log(out)
第一个地图路径值被第二个覆盖。 为什么会这样? 如何解决这个问题? 感谢您的帮助!
var p = [];
p = path;
这两行代码有什么意义?您是希望每次迭代都使用相同的 path
,还是希望函数的每次迭代都有自己的路径?
它的编码方式与编写 var p = path;
相同,并且每次迭代都将其推入然后弹出。
如果要为 out
的每个元素制作数组副本,请使用以下代码中的 slice
执行此操作:
result = {
"TotalCount": count,
"Path": p.slice(),
"title": results.name
}