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

如何高性能复制对象属性名并将值统一设为false?

高性能实现动态生成全false值的一级键对象

嘿,这个需求我刚好踩过坑,针对你要的动态匹配原对象一级键、所有值设为false的场景,最推荐的高性能ES6+方案是用Object.fromEntries()搭配Object.keys()的组合,引擎底层优化过的原生方法比手动循环或者先拷贝再修改高效太多,尤其是对象键数量较多的时候。

最优实现代码

const firstObject = { key1: 'value1', key2: 'value2', /* 更多键 */ };
const secondObject = Object.fromEntries(
  Object.keys(firstObject).map(key => [key, false])
);

为什么这是高性能方案?

  • 原生方法加持:Object.keys()和Object.fromEntries()都是JS引擎底层优化的API,比手动写for循环或者forEach的执行效率高很多
  • 无多余开销:直接从键数组生成键值对数组,一步转换为目标对象,避免了创建空对象再逐个赋值的中间步骤
  • 完全满足需求:自动匹配firstObject的所有一级键,不需要硬编码任何键名,且只处理一级深度,完全符合你的要求

其他常见方案的性能对比

手动循环方案(性能略差)

虽然也能实现,但手动赋值的引擎优化不如原生组合方法:

const secondObject = {};
for (const key of Object.keys(firstObject)) {
  secondObject[key] = false;
}

浅拷贝后修改(性能最差)

这种方案会做两次对象遍历(一次拷贝,一次修改),额外开销最大,不推荐:

const secondObject = {...firstObject};
for (const key of Object.keys(secondObject)) {
  secondObject[key] = false;
}

ES6兼容 fallback(如果不支持Object.fromEntries)

如果你的环境只能支持基础ES6(比如不支持ES2019的fromEntries),可以用Object.assign()配合展开语法,性能略逊于前者,但依然比手动循环高效:

const secondObject = Object.assign(
  {},
  ...Object.keys(firstObject).map(key => ({ [key]: false }))
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:13:56