地图数组中的值在 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
    }