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

如何用map函数结合扩展运算符从变量数组提取指定对象字段?

动态提取对象指定字段生成新数组的优雅实现

方法一:使用 reduce 构建新对象

这是兼容性较好的基础实现方式:

const newReport = report.map(item => 
  fields.reduce((newObj, key) => {
    newObj[key] = item[key];
    return newObj;
  }, {})
);

遍历原数组的每个对象,通过reduce将fields数组中指定的字段逐一从原对象中取出,存入空对象并返回,最终组成目标数组。

方法二:使用 Object.fromEntries 简化代码

如果运行环境支持ES2019及以上,可以用更简洁的写法:

const newReport = report.map(item => 
  Object.fromEntries(fields.map(key => [key, item[key]]))
);

先把fields数组转换成[键名, 对应值]的二维数组,再通过Object.fromEntries直接转成目标对象,代码更紧凑直观。

方法三:封装成通用复用函数

如果需要多次使用这个逻辑,可以封装成函数提升复用性:

function pickFields(sourceArray, targetFields) {
  return sourceArray.map(item => 
    Object.fromEntries(targetFields.map(key => [key, item[key]]))
  );
}

// 调用示例
const newReport = pickFields(report, fields);

后续需要提取不同字段时,直接传参调用函数即可,无需重复编写逻辑。

为什么你之前的写法不生效

你尝试的({ ...fields })是错误用法:对象解构需要明确指定要提取的键名,而fields是数组,扩展运算符...无法将数组元素映射为对象的键,因此达不到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:45:35