javascript - 如何更新/设置具有相同值 JavaScript/Typescript 的多个对象(具有相同参数)的值
问题描述
最好的方法是什么/如何更新具有相同值集的两个对象?
我知道的唯一方法是同时设置每个对象的每个属性。按照下面的例子。下面我使用一种方法来填充对象,方法是将值作为参数传递。
请注意:individual
我在方法 ( ) 中传递的参数populateIndividualDetails(individual: SelectedMemberIndividualData)
包含许多我不需要的参数,并且不是我想要的格式。因此使用一种方法来分配属性。
附加说明:我希望填充的两个对象具有相同的参数,并且格式完全相同。对象具有嵌套参数。
也许可以在填充第一个对象后复制它?
示例:
model = {
initials: '',
name: '',
address: {
streetName: '',
...
}
...
}
initialValues= {
initials: '',
name: '',
address: {
streetName: '',
...
}
...
}
populateIndividualDetails(individual: SelectedMemberIndividualData) {
this.model.initials = individual.initials;
this.initialValue.initials = individual.initials;
...
}
解决方案
model
与其填充并使用空键值对,不如initialValues
考虑创建一个要在model
和initialValues
对象中设置的属性数组。然后,populateIndividualDetails()
您可以在其中使用 for 循环遍历该数组,并从传入的individual
对象中获取每个属性,然后您可以在您的model
和initialValues
对象上设置这些属性。
const desiredProps = ["a", "b", "d"]; // contains "initials", etc...
const model = {};
const initialValues = {};
function populateIndividualDetails(individual) {
for(const prop of desiredProps) {
model[prop] = individual[prop];
initialValues[prop] = individual[prop];
}
}
populateIndividualDetails({a: 1, b: 2, c: 3, d: 4}); // ignore "c" value
console.log(model);
console.log(initialValues);
编辑
如果您需要model
并且initialValues
最初被填充,那么最好创建一个并深度克隆另一个(正如您提到的您可以拥有嵌套对象属性),然后使用递归来处理嵌套对象:
const model = {a: '', b: {c: ''}, e: ''};
const initialValues = JSON.parse(JSON.stringify(model)); // deep-clone model, both are their own object references.
function populateIndividualDetails(o1, o2, individual) {
Object.keys(o1).forEach(key => {
if(Object(o1[key]) === o1[key])
populateIndividualDetails(o1[key], o2[key], individual[key])
else
o1[key] = o2[key] = individual[key];
});
}
populateIndividualDetails(model, initialValues, {a: 1, b: {c: 2, d: 3}, e: 4, f: 5}); // ignore "f" value
console.log(model);
console.log(initialValues);
推荐阅读
- postgresql - 我们如何跟踪 postgreSQL 中逻辑复制的初始加载进度
- sql - 如何正确求和数据?
- arrays - 如何在 wordpress 过滤器中仅显示子类别?
- algorithm - 按升序排列对角矩阵
- azure - Azure devops 自动从部署组中删除目标虚拟机
- reactjs - 如何通过按 ENTER 键在反应待办事项应用程序中添加任务?
- flutter - 许可处理程序 - 位置不起作用(颤振)
- javascript - 如何通过axios获取请求/响应的总记录(X-Total-Count)?
- node.js - 部署到 vercel
- react-native - 使用 zoho 图像获取 api 时,如何在本机反应中解决图像数据响应为 null 的问题?