javascript - JS检查对象中是否存在对象并将值添加到格式化对象
问题描述
我正在填写表单的字段,并且我有一个 formattedData 对象,该对象保留了原始数据对象的深层副本。在表单中,如果字段发生更改,我需要使用值对象中的属性更改格式化数据对象。
我制作了字段的模拟数据对象:
const formattedData = {
model_type: 'Config',
accessModel: '5732132',
// Random fields
advancedData: {
isLion: {
enabled: true,
animalType: 'Cat',
move: {
model_type: '',
source: '',
value: 'auto'
}
},
isTiger: {
enabled: true,
animalType: 'Cat',
move: {
model_type: '',
source: '',
value: 'auto'
}
}
},
data: {
isLion: {
enabled: true,
animalType: 'Cat',
id: 8,
power: 6
},
isTiger: {
enabled: true,
animalType: 'Cat',
id: 8,
power: 6
}
}
}
这是我表单中的对象:
const values = {
advancedData: {
isLion: {
move: {
value: '89'
}
},
isTiger: {
move: {
value: '89'
}
}
}
}
我需要检查values.advancedData
: isLion
orisTiger
是否已更改,然后将更改的值放入formattedData
对象中。在我给出的示例中,用户发生了变化values.advancedData.isLion
,values.advancedData.isTiger
并且我需要将这些值放入其中formattedData
而不更改 value 属性以外的任何内容。
此外,如果值已更改,我需要将其更改source
为“手动”
解决方案
实现这一点的简单方法如下所示,假设数据结构始终相同。
// DATA
// For brevity I omitted the data body, but same as yours
const formattedData = {
// ... rest of data body
};
const values = {
// ... rest of data body
};
// SOLUTION - Using object spread
formattedData.advancedData.isLion = { ...formattedData.advancedData.isLion, ...values.advancedData.isLion };
formattedData.advancedData.isLion.move.model_type = 'manual';
formattedData.advancedData.isTiger = { ...formattedData.advancedData.isTiger, ...values.advancedData.isTiger };
formattedData.advancedData.isTiger.move.model_type = 'manual';
推荐阅读
- javascript - 如果我将 console.log 放在 vue.config.js 中,我在哪里可以看到输出?
- javascript - Javascript:两个下拉重定向提交
- linux - 数组的 awk 键值问题
- sqlite - 加载后如何验证/调试触发器语句
- doctrine-orm - Doctrine中OneToOne关系不能懒加载的原因是什么?
- php - 如何找到数组的最后一项?
- flutter - 为什么必须在 Flutter 中使用 await 来保存/获取本地数据?
- three.js - Aframe / Three.js 受污染的画布可能无法加载
- elasticsearch - 如何在弹性搜索中总结文档
- c - 多个弱符号的后果(C 链接器)