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(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 来获得运营商/电话号码参数。
解决方案
根据我在遍历充满人员对象的人员数组时收集的信息,您希望在不改变原始人员的情况下向人员添加一些数据。我看到您已经在构建一个新对象,这是我个人会做的。有几种方法可以做到。您可以构建一个从 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__
,您将看到继承的成员
推荐阅读
- content-management-system - TYPO3 9.5.2 Slug:多语言:找不到页面 404 异常,如果不存在页面翻译
- ajax - Zend2:通过 ajax 动态加载部分(例如标签)
- json - 我的片段无法显示来自 json url 的 recyclerview 和数据
- node.js - Node.js 命令行变量无法识别
- c# - 隐藏 xaml 元素,但也能够在 UWP 中使用 RenderTargetBitmap 进行渲染
- python - 我想创建一个表并使用 python 使用行和列选择值
- javascript - 离子日期选择器本地日期格式?
- git - 如何在多分支 git 项目中体面地使用子模块?
- kubernetes-helm - helm get 获取发布图表的语法
- javascript - 将 props 传递给 Children of Children(嵌套组件树)