首页 > 解决方案 > 如何更新/设置具有相同值 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;
    ...
}

标签: javascripttypescript

解决方案


model与其填充并使用空键值对,不如initialValues考虑创建一个要在modelinitialValues对象中设置的属性数组。然后,populateIndividualDetails()您可以在其中使用 for 循环遍历该数组,并从传入的individual对象中获取每个属性,然后您可以在您的modelinitialValues对象上设置这些属性。

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);


推荐阅读