Javascript 处理对象的新参数

Javascript 处理对象的新参数,javascript,Javascript,当涉及到处理对象的新数据时,我不太确定处理这些新数据的最佳方法是什么。我自己有两种方法可以解决这个问题,但对我来说,这两种方法似乎都有代码的味道。也许有更好的办法 下面是一个例子: // an array of people objects in which the objects should // only contain specific info to that person let people = [/* array of people */]; people.forEach(pe

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

下面是一个例子:

// 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类/对象中未标识Carrier和phoneNumber。这些也是我不想在person类中显式定义的参数,即使它们与person相关。这些信息只会在这个实例中使用,我不想把Person类搞得乱七八糟

解决方案1:将参数硬塞到现有对象中

person.carrier = carrier;
person.phoneNumber = phoneNumber;`
解决方案2:使用新参数创建一个全新的对象

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

这两种方法中的任何一种对我都有效,但两种方法看起来都很肮脏。我之所以需要它,是因为人物数组可能会在不同的地方重复多次以查找不同的信息。但该循环可能依赖于person obj来获得载波/电话号码参数

从我收集的信息来看,当你在充满person对象的people数组中循环时,你希望在不改变原始person的情况下向person添加一些数据。我看到你已经在建造一个新的物体,这是我个人会做的。有几种方法可以做到这一点。您可以构建从Person继承的另一个类,并在该类的foreach中创建一个新实例,或者您也可以使用spread语法执行您正在执行的操作

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.\uuuu proto\uuuuuuu您将看到继承的成员

解决方案#1对我来说似乎是最好的。第二个问题是,如果需要,您将无法使用
Person
类的方法。您好,Guillaume,因此使用这个newPerson对象,它将被发送到另一个函数,该函数将作为API响应发送它。我试图解决的最大问题是不要危险地变异person对象。有一次一切都很好,但假设6个月后person对象可能有10个参数,这些参数在原始类中从未定义过,但在使用它的给定函数中是必需的。