C转JS开发者求助:如何为JavaScript对象添加odd/even键并赋值?
解决countBy函数中JS对象的键值赋值问题
针对你当前代码的修改
你已经正确统计了oddCounter和evenCounter,只需要在返回对象前,把这两个计数器的值赋值给obj对应的键即可。JS对象的键值赋值有两种常用方式:
方式1:点语法(适合已知固定键名)
在循环结束后、return之前添加:
obj.odd = oddCounter; obj.even = evenCounter;
方式2:方括号语法(通用,支持动态键名)
同样在循环结束后添加:
obj['odd'] = oddCounter; obj['even'] = evenCounter;
另外注意:你代码里的console.log(obj)写在return之后,这行代码永远不会执行,要测试的话可以把它移到return前面,或者直接用外部的console.log(countBy(nums, evenOdd))。
修改后的完整代码:
function countBy(array, callback) { let obj = {}; let oddCounter = 0; let evenCounter = 0; for (let i = 0; i < array.length; i++) { if (callback(array[i]) === 'odd') { oddCounter++; } else if (callback(array[i]) === 'even') { evenCounter++; } } // 添加赋值逻辑 obj.odd = oddCounter; obj.even = evenCounter; return obj; } // 测试代码 function evenOdd(n) { if (n % 2 === 0) return 'even'; else return 'odd'; } const nums = [1, 2, 3, 4, 5]; console.log(countBy(nums, evenOdd)); // 输出: { odd: 3, even: 2 }
更通用的实现(符合题目核心要求)
你当前的代码是硬编码了odd和even,但题目要求callback的返回值作为key,也就是说如果callback返回其他值(比如'positive'/'negative'),你的代码就无法处理。推荐改成动态统计的写法,不需要提前定义计数器:
function countBy(array, callback) { let obj = {}; for (let i = 0; i < array.length; i++) { // 获取当前元素的callback返回值作为键 const key = callback(array[i]); // 如果对象里还没有这个键,初始化为0 if (!obj[key]) { obj[key] = 0; } // 对应键的计数加1 obj[key]++; } return obj; }
这种写法更灵活,完全符合题目要求,不管callback返回什么字符串,都能自动统计出现次数。
内容的提问来源于stack exchange,提问作者areh1819
相关产品推荐
相关产品推荐

