簡體   English   中英

Javascript 使用 map() 運算符有條件地添加嵌套的 object

[英]Javascript conditionally adding the nested object using map() operator

我有下面的 JSON,

var original =  {
  "todos": [
    {
      "accountNo": "50190000",
      "name": "Sarkar",
      "vpainfo": [
        {
          "vpa": "log@bda",
          "mccCode": "0000"
        }
      ]
    }
  ]
}

並試圖在嵌套數組內添加新數據,即“vpainfo”。 我嘗試使用以下代碼並能夠在“vpainfo”中添加新值。

var newdata = {"vpa":"first@bda","mccCode":"1111"};


var newObj = 
    Object.assign({}, original,
    {
      todos: original.todos.map(todoInfo=>(todoInfo.accountNo=="50190000")?[
        ...todoInfo.vpainfo,
        newdata
      ]: todoInfo)
    });

結果 object 是,

{"todos":[[{"vpa":"log@bda","mccCode":"0000"},{"vpa":"first@bda","mccCode":"1111"}]]}

但是很少有鍵和值(accountNo 和 name)被遺漏,我們如何獲得具有最新更新值的完整 object?

您只返回數組,而不是實際的 object,因此會出現錯誤。

 var original = { "todos": [ { "accountNo": "50190000", "name": "Sarkar", "vpainfo": [ { "vpa": "log@bda", "mccCode": "0000" } ] } ] } const newdata = {"vpa":"first@bda","mccCode":"1111"}; const newObj = Object.assign({}, original, { todos: original.todos.map(todoInfo=>{ if(todoInfo.accountNo=="50190000"){ return {...todoInfo, vpainfo: [...todoInfo.vpainfo, newdata] } } return todoInfo }) }); console.log(newObj)

所有那些傳播運營商似乎有點過分......

如果您想做的只是將新數據newdata到現有數組,那么請執行以下操作:

 var original = { "todos": [{ "accountNo": "50190000", "name": "Sarkar", "vpainfo": [{ "vpa": "log@bda", "mccCode": "0000" }] }] }; const newdata = { "vpa": "first@bda", "mccCode": "1111" }; // Find the correct account. const account = original.todos.filter(t => t.accountNo === '50190000')[0]; if (account) { account.vpainfo.push(newdata); } console.log(original);

暫無
暫無

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

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