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

实现嵌套数组操作与货币转换的JavaScript函数问题排查

修复后代码(对象存储版本,推荐)

var currenciesDB = {};

function dynamicConverter(opType, paramArray, targetCurrency) {
    // 通用参数校验
    if (!opType || !paramArray) {
        return "invalid data provided!";
    }

    if (opType === "add") {
        // add场景参数校验
        if (paramArray.length !== 2 || typeof paramArray[1] !== 'number') {
            return "invalid data provided!";
        }
        const [currencyName, rate] = paramArray;
        // 校验币种是否已存在
        if (currenciesDB.hasOwnProperty(currencyName)) {
            return "invalid data provided!";
        }
        currenciesDB[currencyName] = rate;
        // 返回新增条目数量
        return 1;
    } else if (opType === "convert") {
        // convert场景参数校验
        if (!targetCurrency || paramArray.length !== 2) {
            return "invalid data provided!";
        }
        const [sourceCurrency, amount] = paramArray;
        // 校验币种合法性
        if (!currenciesDB.hasOwnProperty(sourceCurrency) || !currenciesDB.hasOwnProperty(targetCurrency)) {
            return "invalid data provided!";
        }
        // 汇率转换逻辑:先转美元再转目标币种
        const usdAmount = amount * currenciesDB[sourceCurrency];
        const convertedAmount = usdAmount / currenciesDB[targetCurrency];
        return convertedAmount;
    }

    // 未知操作类型返回错误
    return "invalid data provided!";
}

主要修改点

  1. 存储结构从数组改为对象,直接用币种名作为键,不需要遍历查找,判断存在性和取值都更高效,也解决了原代码中用非数字索引访问数组拿不到值的问题。
  2. 补全了所有场景的参数校验,覆盖参数缺失、格式非法、币种不存在/重复的错误场景,统一返回要求的错误信息。
  3. 修正了add逻辑的存在性判断逻辑,原代码中的toFindIdx函数返回值逻辑完全错误,无法正确匹配已存在的币种。
  4. 修正了convert逻辑的参数索引错误,原代码错误读取了数组索引1和2,正确的待转换币种和金额对应索引是0和1。
  5. 调用dynamicConverter('add', ['euro', 1.2])时第二个参数取值为euro的问题,只要严格按照该写法传递参数,第二个参数会正常拿到完整数组,若仍出现该问题可检查是否有其他代码修改了函数入参,或者调用时误将数组拆分为多个独立参数传递。

数组存储可选版本

如果需要保持最初的数组存储设计,可使用以下版本:

var currenciesDB = [];

function dynamicConverter(opType, paramArray, targetCurrency) {
    if (!opType || !paramArray) {
        return "invalid data provided!";
    }

    if (opType === "add") {
        if (paramArray.length !== 2 || typeof paramArray[1] !== 'number') {
            return "invalid data provided!";
        }
        const [currencyName, rate] = paramArray;
        const existIndex = currenciesDB.findIndex(item => item[0] === currencyName);
        if (existIndex !== -1) {
            return "invalid data provided!";
        }
        currenciesDB.push([currencyName, rate]);
        return 1;
    } else if (opType === "convert") {
        if (!targetCurrency || paramArray.length !== 2) {
            return "invalid data provided!";
        }
        const [sourceCurrency, amount] = paramArray;
        const sourceItem = currenciesDB.find(item => item[0] === sourceCurrency);
        const targetItem = currenciesDB.find(item => item[0] === targetCurrency);
        if (!sourceItem || !targetItem) {
            return "invalid data provided!";
        }
        const usdAmount = amount * sourceItem[1];
        const convertedAmount = usdAmount / targetItem[1];
        return convertedAmount;
    }

    return "invalid data provided!";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:24:03