簡體   English   中英

地圖數組中的值在 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;相同var p = path; ,每次迭代你都推到它然后彈出。

如果要為out每個元素制作數組的副本,請在以下代碼中使用slice此操作:

    result = {
      "TotalCount": count,
      "Path": p.slice(),
      "title": results.name
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM