![](/img/trans.png)
[英]update nested value in object of objects with keys in javascript
[英]Javascript Nested map iteration do not update my Object's Value
我對嵌套地圖有疑問。 我需要在 axios 響應之后更新數據,但我的值沒有傳遞到主容器這是我的代碼
let abc = usr.map(updatedNode=> {
JSON.parse(updatedNode.orderDetail).map(orderProduct=> {
axios.get(appUrl +'productDetail/'+orderProduct.id)
.then(function (response) {
orderProduct.productTypes.map(opt => {
JSON.parse(response.data[0].productTypes).map(node => {
if(node.id == opt.id){
delete opt['quantity']
delete node['quantity']
opt.quota = node.quota
}
})
return opt;
})
})
return orderProduct
})
return updatedNode
})
res.send(abc);
這段代碼應該更新配額數量,但是在外部的“updatedNode”中更新了我看不到更新的值我在哪里做錯了?
在下面編輯我的 usr.json;
[
{
id: "cbc9b288-36f5-4e45-a75a-9c75f9a8287c",
orderDetail: "[{"productTypes":[{"id":1,"productType":"S-M-LA","productTotalPrice":"35","quota":38,"productSubPiece":3,"value":5,"quantity":[{"value":0},{"value":1},{"value":2},{"value":3},{"value":4},{"value":5},{"value":6},{"value":7},{"value":8},{"value":9},{"value":10},{"value":11},{"value":12},{"value":13},{"value":14},{"value":15},{"value":16},{"value":17},{"value":18},{"value":19},{"value":20},{"value":21},{"value":22},{"value":23},{"value":24},{"value":25},{"value":26},{"value":27},{"value":28},{"value":29},{"value":30},{"value":31},{"value":32},{"value":33},{"value":34},{"value":35},{"value":36},{"value":37},{"value":38}]},{"id":2,"productType":"S-M","productTotalPrice":"75","quota":3,"productSubPiece":2,"value":"","quantity":[{"value":0},{"value":1},{"value":2},{"value":3}]}],"id":"productID","productName":"SONpR","productName_ru":"prSon","picture":"PICTURE"}]",
orderType: "PENDING",
userId: "8f9c623c-98ce-4904-a5b7-2d5fc68a7f5e",
createTime: "2020-07-16T18:30:42.000Z",
lastUpdate: "0000-00-00 00:00:00",
name: "NAME"
}
]
orderDetail 是字符串,所以我將其解析為 JSON 然后嘗試操縱日期
updatedNode 是 mongodb 結果集還是什么? 如果是,首先將其轉換為 JS object。
let obj = updatedNode.toObject();
比使用 obj 變量。
AFAIK,Array.map 不接受 Promise 這是現在正在發生的事情。 您可以組合所有 api 調用,等待它,然后使用 map 進行處理。
async function abc(usr) {
const promises = []
usr.forEach(updatedNode => {
JSON.parse(updatedNode.orderDetail).forEach((orderProduct) => {
promises.push(axiom.get(`${appUrl}productDetail/${orderProduct.id}`))
})
})
const resArray = await Promise.all(promises)
const abc = resArray.map(response => {
orderProduct.productTypes.map(opt => {
JSON.parse(response.data[0].productTypes).map(node => {
if(node.id == opt.id){
delete opt['quantity']
delete node['quantity']
opt.quota = node.quota
}
})
return opt;
})
})
}
您可能需要稍作調整以獲得結果。
因為您要進行多個 api 調用,您可以使用Promise.all()
然后以您喜歡的任何方式操作您的數據,還請注意,發布的用戶信息數組存在語法錯誤。
你的代碼應該是這樣的
Promise.all(usr.map(updatedNode=>JSON.parse(updatedNode.orderDetail).map(orderProduct=>
axios.get(appUrl +'productDetail/'+orderProduct.id)))).then(p=>console.log(p) // manipulate your data here )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.