如何在JavaScript中映射两个长度不同的Array并实现价格求和?
解决两个价格数组对应相加并覆盖全部元素的问题
我明白你遇到的问题了——现在的代码只跟着第一个数组的长度走,导致第二个数组里超出的元素没被计算进去对吧?其实只要调整遍历的长度,再处理数组长度不一致的情况就能解决,下面给你具体的方案:
核心思路
- 先获取两个数组中最长的那个的长度,确保能遍历到所有元素
- 遍历每个索引位置时,若某个数组在该索引没有元素(即索引超过数组长度),就用
0来代替,避免出现NaN或遗漏计算
代码示例(以JavaScript为例)
原来的问题代码(仅处理第一个数组长度)
const basePrices = [10, 20, 30]; const extraPrices = [5, 15, 25, 35]; const totalPrices = []; // 只遍历basePrices的长度,extraPrices的第4个元素35被忽略 for (let i = 0; i < basePrices.length; i++) { totalPrices.push(basePrices[i] + extraPrices[i]); } console.log(totalPrices); // 输出:[15, 35, 55]
修改后的代码(处理全部元素)
const basePrices = [10, 20, 30]; const extraPrices = [5, 15, 25, 35]; // 获取两个数组的最大长度 const maxLength = Math.max(basePrices.length, extraPrices.length); const totalPrices = []; for (let i = 0; i < maxLength; i++) { // 用空值合并运算符更严谨,避免0被误判为不存在 const base = basePrices[i] ?? 0; const extra = extraPrices[i] ?? 0; totalPrices.push(base + extra); } console.log(totalPrices); // 输出:[15, 35, 55, 35]
更简洁的写法(用Array.from)
const maxLength = Math.max(basePrices.length, extraPrices.length); const totalPrices = Array.from({ length: maxLength }, (_, index) => { return (basePrices[index] ?? 0) + (extraPrices[index] ?? 0); });
如果是Python语言的实现
base_prices = [10, 20, 30] extra_prices = [5, 15, 25, 35] max_length = max(len(base_prices), len(extra_prices)) total_prices = [] for i in range(max_length): # 判断索引是否在数组范围内,不在则用0代替 base = base_prices[i] if i < len(base_prices) else 0 extra = extra_prices[i] if i < len(extra_prices) else 0 total_prices.append(base + extra) print(total_prices) # 输出:[15, 35, 55, 35]
这样不管哪个数组更长,所有元素都能被正确计算啦~
内容的提问来源于stack exchange,提问作者CodeStalker
相关产品推荐
相关产品推荐

