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; } };
实现说明
- each方法修正:原实现仅给回调传入了键/索引,不符合规则。修改后严格按要求传入三个参数,方法本身无任何返回值,完全符合挑战要求。
- 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
相关产品推荐
相关产品推荐

