首页 > 解决方案 > 处理对象的新参数

问题描述

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

下面是一个例子:

// 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"];
});

只是暂停一下,这就是问题开始的地方。在人员类/对象中未标识运营商和电话号码。这些也是我不想在人员类中明确定义的参数,即使它们与人员相关。该信息只会在这种情况下使用,我不想弄乱 Person 类。

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

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

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

let newPerson = {
    firstName: person.firstName,
    lastName: person.lastName,
    carrier: carrier,
    phoneNumber: phoneNumber
}

这些方法中的任何一种都对我有用,但看起来都很脏。我需要这个,因为人员数组可能会在不同的地方多次迭代以找到不同的信息。但是该循环可能依赖于 person obj 来获得运营商/电话号码参数。

标签: javascript

解决方案


根据我在遍历充满人员对象的人员数组时收集的信息,您希望在不改变原始人员的情况下向人员添加一些数据。我看到您已经在构建一个新对象,这是我个人会做的。有几种方法可以做到。您可以构建一个从 Person 继承的另一个类并在其 foreach 中创建一个新实例,或者您也可以使用扩展语法执行您正在做的事情。

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

这将为您提供原始人的所有内容并添加新属性。我相信你也可以做类似的事情

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

作为一个注释 es6 语法,而{param: param}不仅仅是{param} 我仍然有点新,但我相信这应该可以满足您的需求。

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


推荐阅读