You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将对象数组可枚举自有属性复制到类实例数组的最优方法

普通对象数组转类实例数组的简洁实现

需求场景

现有普通对象数组如下:

let x = [{Id:1,Name:"abc",Age:""},{Id:2,Name:"def",Age:""}] ; 

需要将数组内所有对象的属性赋值到ClientModel类的实例中,最终得到由类实例组成的新数组,不需要手动遍历元素执行push操作。

最优实现方案

直接使用Array.map()方法替代原有的forEach + 手动push逻辑,代码更简洁,不需要手动操作新数组:

class ClientModel {
  constructor(){
    this.Id = null ; 
    this.Name = null ; 
  }
}

let x = [{Id:1,Name:"abc",Age:""},{Id:2,Name:"def",Age:""}] ; 
// 一行完成转换,无需手动创建空数组和push
let y = x.map(elem => Object.assign(new ClientModel(), elem));

方案说明

  • Array.map() 本身会遍历原数组的每一项,将回调函数的返回值组合成新数组返回,完全替代手动初始化空数组、遍历push的操作
  • Object.assign(new ClientModel(), elem) 逻辑和原参考实现一致:先创建空的ClientModel类实例,再将源对象的所有可枚举属性合并到实例上

如果需要过滤掉源对象中类未定义的属性(比如示例中的Age属性),可以优化类的构造函数,主动接收参数赋值:

class ClientModel {
  constructor({Id, Name}){
    this.Id = Id;
    this.Name = Name;
  }
}

let y = x.map(elem => new ClientModel(elem));

这种实现更可控,不会把源对象中多余的属性带到类实例中。

内容的提问来源于stack exchange,提问作者lzaek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:48:00