如何使用map方法生成含原对象所有属性及新增自定义属性的新数组
实现方案
你原来的写法是手动指定了仅返回三个属性,所以才会丢失原对象的其他字段,用对象展开运算符把原对象的所有属性都展开到新对象里就能满足需求。
var options = accounts.data.map((o) => ({ // 展开原对象的所有原有属性 ...o, // 新增自定义test属性,若属性名和原对象现有属性重名,后面的赋值会覆盖原属性值 test: o.name + o.id }))
补充说明
- 该写法不会修改
accounts.data里的原有对象,生成的是全新的数组和对象,不会污染原始数据 - 如果需要兼容不支持ES6展开语法的旧运行环境,可以用
Object.assign实现相同效果:
var options = accounts.data.map((o) => Object.assign({}, o, { test: o.name + o.id }) )
- 如果你还需要保留示例里的
label、value、number三个额外字段,直接加在展开语句后面即可:
var options = accounts.data.map((o) => ({ ...o, label: o.name, value: o.id, number: o.accountNumber, test: o.name + o.id }))
内容的提问来源于stack exchange,提问作者Thomas Segato
相关产品推荐
相关产品推荐

