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

JavaScript中如何用无返回值的each方法实现keys方法功能

正确实现代码

let _ = {
  each: function(collection, callback) {
    for (let key in collection) {
      // 按要求依次传入元素值、键/索引、原集合作为回调参数
      callback(collection[key], key, collection);
    }
  },

  keys: function(object) {
    const keyList = [];
    // 调用each方法,在回调中收集所有键
    this.each(object, (value, key) => {
      keyList.push(key);
    });
    return keyList;
  }
};

实现说明

  1. each方法修正:原实现仅给回调传入了键/索引,不符合规则。修改后严格按要求传入三个参数,方法本身无任何返回值,完全符合挑战要求。
  2. keys方法逻辑:利用闭包特性,在keys方法内部先初始化空数组存储结果,each方法的回调可以直接访问这个外部数组,遍历过程中将每个元素的键推入数组,遍历完成后返回数组即可,不需要each方法有返回值,也无需额外实现eachEverything方法。

测试验证

运行官方提供的测试用例:

// each方法测试用例
console.log("#### object ####");
_.each({a: 1, b: 2, c: 3}, console.log);
console.log("#### array ####");
_.each([1, 2, 3], console.log);

// keys方法测试用例
const testObject = { a: 1, b: 2, c: 3, d: 4 };
const expected = _.keys(testObject);
const actual = ["a", "b", "c", "d"];

console.log("##### 以下是keys方法的测试用例 #####");
if (JSON.stringify(expected) === JSON.stringify(actual)) {
  console.log('恭喜通过!');
} else {
  console.log('请重试!');
}

输出完全匹配预期结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 21:06:03