簡體   English   中英

從JS對象將屬性值重新分配給另一個

[英]Reassigning from JS Object A property value to another

我正在嘗試從JSON A到JSON B分配商品價格,設法獲取價格並將其重新分配給屬性,而不是整個對象。

這是我的代碼段,它從第一個對象獲取價格並將其重新分配給TotalOrignialValue但是如何將其推回到newJson對象?

有沒有更令人滿意的方式來實現這一目標?

 // Code goes here var items = { "TransactionLine": [ { "Product": { "Id": null, "Codes": [ "1112" ], "Sku": null }, "TotalValue": 2.35, }, { "Product": { "Id": null, "Codes": [ "1113" ], "Sku": null }, "TotalValue": 2.15, } ], "CustomData": {} }; var itemPrice = []; for (var i = 0; i < items.TransactionLine.length; i++) { var el = items.TransactionLine[i]; itemPrice.push(el.TotalValue); console.log(el.TotalValue); } var newJson = { "OrderLines": [ { "Product": { "Id": 9, "Codes": [ "1113" ], "Sku": "CS1113" }, "TotalOriginalValue": 0, // asign the price here }, { "Product": { "Id": 21, "Codes": [ "1112" ], "Sku": "CS1112" }, "TotalOriginalValue": 0, // asign the price here } ] }; var newPrice = []; for (var x = 0; x < newJson.OrderLines.length; x++) { var xd = newJson.OrderLines[x].TotalOriginalValue; xd = itemPrice[x]; newjson = { "TotalOriginalValue": xd }; newPrice.push(newjson); } console.log('newJSON >> ', newPrice); 

看起來您從JSON A到JSON B的唯一連接是項目上的代碼數組。

您可以遍歷JSON a中的條目,通過檢查代碼值在JSON B中找到相應的項目,然后直接在JSON B條目上分配值

 var items = { "TransactionLine": [ { "Product": { "Id": null, "Codes": [ "1112" ], "Sku": null }, "TotalValue": 2.35, }, { "Product": { "Id": null, "Codes": [ "1113" ], "Sku": null }, "TotalValue": 2.15, } ], "CustomData": {} }; var newJson = { "OrderLines": [ { "Product": { "Id": 9, "Codes": [ "1113" ], "Sku": "CS1113" }, "TotalOriginalValue": 0, // asign the price here }, { "Product": { "Id": 21, "Codes": [ "1112" ], "Sku": "CS1112" }, "TotalOriginalValue": 0, // asign the price here } ] }; items.TransactionLine.forEach(item=>{ var match = newJson.OrderLines.find(entry=>entry.Product.Codes[0] === item.Product.Codes[0]); if (!match) { return; } match.TotalOriginalValue = item.TotalValue; }); console.log(newJson); 

這也將減少數組的使用和JSON項之間的循環。 在2的列表上,它還不錯,但是加了幾百/千,它將變得很明顯。

使用Lodash使您的生活變得更加輕松,使用lodash可以滿足您的需求,而使用lodash可能更簡潔。

var items = {
    "TransactionLine": [
      {
        "Product": {
          "Id": null,
          "Codes": [
            "1112"
          ],
          "Sku": null
        },
        "TotalValue": 2.35,
      },
      {
        "Product": {
          "Id": null,
          "Codes": [
            "1113"
          ],
          "Sku": null
        },
        "TotalValue": 2.15,
      }
    ],
    "CustomData": {}
  };



  var newJson = {
    "OrderLines": [
          {
            "Product": {
              "Id": 9,
              "Codes": [
                "1113"
              ],
              "Sku": "CS1113"
            },
            "TotalOriginalValue": 0, // asign the price here
          },
          {
            "Product": {
              "Id": 21,
              "Codes": [
                "1112"
              ],
              "Sku": "CS1112"
            },
            "TotalOriginalValue": 0, // asign the price here
          }
        ]
  };

var test = _.map(items.TransactionLine, (item,index) => {
return _.set(newJson.OrderLines[index], 'TotalOriginalValue', item.TotalValue)
})

console.log(test)

https://jsfiddle.net/k6vdyhx7/124/

遍歷OrderLines鍵值(它是一個數組),然后將每個TotalOriginalValue值替換為items.TransactionLine數組中的響應值。

 var items = {TransactionLine:[{Product:{Id:null,Codes:["1112"],Sku:null},TotalValue:2.35},{Product:{Id:null,Codes:["1113"],Sku:null},TotalValue:2.15}],CustomData:{}}, newJson = {OrderLines:[{Product:{Id:9,Codes:["1113"],Sku:"CS1113"},TotalOriginalValue:0},{Product:{Id:21,Codes:["1112"],Sku:"CS1112"},TotalOriginalValue:0}]}; newJson.OrderLines.forEach((v,i) => v.TotalOriginalValue = items.TransactionLine[i].TotalValue); console.log(newJson); 

暫無
暫無

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

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