处理对象的新参数

时间:2019-03-27 12:56:52

标签: javascript

在处理对象的新数据时,我不太确定什么是处理这些新数据的最佳方法。我有两种方法可以自己解决问题,但对我来说,两种方法似乎都对他们有代码味。也许有更好的方法?

以下是这种情况的示例:

select *
  from "table"
 where (col1,col2) in ( select col1,max(col2)
                          from "table"
                         group by col1 
                          )

只需在此处暂停即可开始出现问题。人员类别/对象中未标识运营商和电话号码。这些也是我不想在人员类中明确定义的参数,即使它们与人员相关。该信息将仅在此实例中使用,而我不希望使Person类混乱。

解决方案1:将参数刺入现有对象

// an array of people objects in which the objects should
// only contain specific info to that person
let people = [/* array of people */];

people.forEach(person => {
    /* Code to find the cellular carrier and phone number of that person */

    let carrier = result["carrier"];
    let phoneNumber = result["phoneNumber"];
});

解决方案2:使用新参数创建一个全新的对象

person.carrier = carrier;
person.phoneNumber = phoneNumber;`

这些方法中的任何一种都对我有用,但是两种方法似乎都很脏。由于有一个事实,即人们数组可能在不同的地方多次迭代以查找不同的信息,因此我需要这样做。但是,该循环可能依赖于人员obj来具有carrier / phoneNumber参数。

1 个答案:

答案 0 :(得分:3)

根据我收集的遍历包含人员对象的人员数组的信息,您希望向人员添加一些数据而不改变原始人员。我看到您已经在建立一个新的对象,这是我个人要做的。有几种方法可以做到。您可以构建另一个继承自Person的类,并在其每个实例中创建一个新实例,或者也可以使用传播语法来完成您的工作。

const newPerson = {...person, param, param, etc}

这将为您提供原始人的一切,并添加新属性。我相信您也可以做类似

的操作
const newPerson = Object.create(person);
newPerson.carrier = carrier;
newPerson.phoneNumber = phoneNumber;

请注意,此处的es6语法不是{param: param},而是{param} 我还是有点新,但是我相信这应该可以满足您的需求。

由于我使用Object.create()错误而进行了编辑。这将创建一个新对象,该对象继承Person的原型,因此可以访问成员。如果您登录人员,您将看到原始的人员成员,但是如果您登录newPerson,您应该只看到添加的成员。如果您登录newPerson.__proto__,将会看到继承的成员