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

如何修改alternatingMap函数实现交替回调映射,得到指定输出数组?

解决alternatingMap函数的交替回调输出问题

问题描述

需求是实现一个alternatingMap函数,返回的新数组中,元素是将原数组元素按顺序交替传入两个回调函数后的结果。当前实现的代码如下:

let alternatingMap = function(array,callback1,callback2) {
    const newArr=[];
    for (let i = 0; i < array.length ; i += 2) {
        newNum1 = callback1(array[i]);
        newArr.push(newNum1)
    }
    for (let i = 1; i < array.length ; i += 2) {
        newNum2 = callback2(array[i]);
        newArr.push(newNum2);
    }
    return newArr;
};

let half = function(num) {
    return num / 2;
}

let triple = function(num) {
    return num*3
}

let numbers = [1,3,5,7,9,10,21]; // 当前输出 [3, 15, 27, 63, 1.5, 3.5, 5]
console.log(alternatingMap(numbers,triple,half));

当前输出是[3, 15, 27, 63, 1.5, 3.5, 5],但目标输出是[3, 1.5, 15, 3.5, 27, 5, 63],需要修改代码实现正确的交替顺序。

问题原因

原代码的逻辑是先遍历所有**偶数索引(0、2、4...)的元素,用callback1处理后全部推入新数组,再遍历所有奇数索引(1、3、5...)**的元素,用callback2处理后推入新数组。这种方式会把同一类回调的结果集中在一起,完全破坏了原数组的交替顺序。

修改方案

不需要调整第二个循环的位置,而是改用单循环遍历所有元素,在循环中判断当前元素的索引奇偶性,对应调用不同的回调函数,并按顺序推入新数组。修改后的代码如下:

let alternatingMap = function(array, callback1, callback2) {
    const newArr = [];
    for (let i = 0; i < array.length; i++) {
        // 偶数索引(从0开始)用callback1,奇数索引用callback2
        const result = i % 2 === 0 ? callback1(array[i]) : callback2(array[i]);
        newArr.push(result);
    }
    return newArr;
};

let half = function(num) {
    return num / 2;
}

let triple = function(num) {
    return num * 3;
}

let numbers = [1,3,5,7,9,10,21];
console.log(alternatingMap(numbers, triple, half)); // 输出 [3, 1.5, 15, 3.5, 27, 5, 63]

说明

这种方式会严格按照原数组的顺序处理每个元素:

  • 索引0(第一个元素)→ 调用triple → 结果3
  • 索引1(第二个元素)→ 调用half → 结果1.5
  • 索引2(第三个元素)→ 调用triple → 结果15
  • 以此类推,最终得到符合预期的交替输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:10:28