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

JavaScript函数修改:添加knife/fork不存在时返回-1的逻辑

问题修正方案

原代码的核心问题有三个:

  • 初始化knife和fork为0,找不到目标元素时无法返回要求的-1
  • 循环嵌套逻辑错误,找fork的循环被包在找knife的循环内部,会重复执行多次造成性能浪费
  • 未处理“找不到元素时的属性赋值”逻辑,可能导致返回的对象缺失对应属性

方案一:单次遍历实现(高效低冗余)

function findKnifeAndFork(utensils) {
    console.log(utensils);
    // 先把默认值设为-1,找不到目标就保留该值
    let knifeIndex = -1;
    let forkIndex = -1;

    // 一次遍历数组,同时检查两个目标元素
    for(let i = 0; i < utensils.length; i++){
        if(utensils[i] === 'knife'){
            knifeIndex = i;
        } else if(utensils[i] === 'fork'){
            forkIndex = i;
        }
    }

    return {
        knife: knifeIndex,
        fork: forkIndex
    };
}

方案二:利用数组原生方法(简洁易读)

JavaScript数组的indexOf方法正好符合需求:找到元素返回对应索引,找不到直接返回-1,代码可以简化到极致:

function findKnifeAndFork(utensils) {
    console.log(utensils);
    return {
        knife: utensils.indexOf('knife'),
        fork: utensils.indexOf('fork')
    };
}

原代码问题拆解

  1. 初始值错误:原代码用0作为初始值,就算数组里没有knife或fork,返回的属性值还是0,违背“不存在则设为-1”的要求,必须把初始值设为-1。
  2. 循环结构错误:嵌套循环会导致每遍历一个元素就完整扫一遍数组找fork,完全没必要,要么把两个循环分开,要么用单次循环同时处理。
  3. 属性赋值不完整:原代码只有找到元素时才会给对象属性赋值,找不到的话对应属性会缺失,必须确保无论找不找得到,属性都存在且值正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:12:40