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

禁用内置方法时获取对象自有键及解决ESLint guard-for-in规则问题

获取对象自有属性键的实现方案

问题说明

需要实现一个函数,将对象的所有自有键转换为数组,但存在以下限制:

  • 禁用所有数组和对象的内置方法(包括Object.keys()、hasOwnProperty())
  • 仅允许使用for in循环
  • 生效的ESLint规则要求必须校验for in循环的键并非来自对象原型

原实现因依赖受限的hasOwnProperty()方法无法使用:

function getKeys(obj) {
  const keysArr = [];

  for (const key in obj) {
    if(obj.hasOwnProperty(key)){ // 该原生方法受限不可用
      keysArr.push(key);
    }
  }

  return keysArr;
}

可行解决方法

通过遍历对象的浅拷贝展开版本{...obj},可以自动过滤原型链上的属性,只保留对象的自有属性。修改后的代码如下:

function getKeys(obj) {
  const keysArr = [];

  for (const key in {...obj}) {
    keysArr.push(key);
  }

  return keysArr;
}

补充说明

该方案能有效过滤原型属性,但无法直接消除ESLint的guard-for-in规则报错,可通过在代码块添加注释忽略该规则:// eslint-disable-next-line guard-for-in。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:54:25