[英]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)
遍歷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.