替换嵌套对象数组JavaScript中键的特定值



嗨,我想知道是否有一种方法来替换存在于深度嵌套对象数组中的值的新传入值。

原始数据

const data = [
{ id: "americano",
data: [{x: "10",y: 0,}, {x: "11",y: 0,}, {x: "12",y: 0,}, {x: "13",y: 0,}, {x: "14",y:0,}],},
{ id: "latte",
data: [{x: "10",y: 0,}, {x: "11",y: 0,}, {x: "12",y: 0,}, {x: "13",y: 0,}, {x: "14",y:0,}],},
{ id: "espresso",
data: [{x: "10",y: 0,}, {x: "11",y: 0,}, {x: "12",y: 0,}, {x: "13",y: 0,}, {x: "14",y:0,}],},
]

输入数据

const serverdata = [
{ "id": "latte",
"data": [{"x": "12", "y": 30}]},
{"id": "americano",
"data": [{"x": "10","y": 20},{ "x": "13","y": 10}]},
{"id": "espresso",
"data": [{"x": "10","y": 30},{ "x": "11","y": 10},{ "x": "12","y": 20}]},
]

预期的结果

const newData = [
{ id: "americano",
data: [{x: "10",y: 0,}, {x: "11",y: 0,}, {x: "12",y: 30,}, {x: "13",y: 0,}, {x: "14",y:0,}],},
{ id: "latte",
data: [{x: "10",y: 20,}, {x: "11",y: 0,}, {x: "12",y: 0,}, {x: "13",y: 10,}, {x: "14",y:0,}],},
{ id: "espresso",
data: [{x: "10",y: 30,}, {x: "11",y: 10,}, {x: "12",y: 20,}, {x: "13",y: 0,}, {x: "14",y:0,}],},
]

我想用传入数据替换y值,但我不确定如何:(需要帮助

我们可以用Array.forEach()Array.filter()来做

const originData = [
{ id: "americano",
data: [{x: "10",y: 0,}, {x: "11",y: 0,}, {x: "12",y: 0,}, {x: "13",y: 0,}, {x: "14",y:0,}],},
{ id: "latte",
data: [{x: "10",y: 0,}, {x: "11",y: 0,}, {x: "12",y: 0,}, {x: "13",y: 0,}, {x: "14",y:0,}],},
{ id: "espresso",
data: [{x: "10",y: 0,}, {x: "11",y: 0,}, {x: "12",y: 0,}, {x: "13",y: 0,}, {x: "14",y:0,}],},
]
const serverData = [
{ "id": "latte",
"data": [{"x": "12", "y": 30}]},
{"id": "americano",
"data": [{"x": "10","y": 20},{ "x": "13","y": 10}]},
{"id": "espresso",
"data": [{"x": "10","y": 30},{ "x": "11","y": 10},{ "x": "12","y": 20}]},
]

originData.forEach(d1 => {
let oData = d1.data
let nData = serverData.find(e1 => e1.id === d1.id).data??[]
oData.forEach(d2 => {
let record = nData.find(e2 => e2.x === d2.x)
if(record){
d2.y = record.y
}
})
}) 
console.log(originData)

最新更新