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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:57:33