
本文详解如何实现 makeAlternatingArray 函数:对输入数组提取索引为 0、2、4… 的元素(即“交替取值,从首项开始”),空数组或单元素数组直接返回原数组。提供 filter() 和 for 循环两种标准解法,并指出常见错误与修复要点。
本文详解如何实现 `makealternatingarray` 函数:对输入数组提取索引为 0、2、4… 的元素(即“交替取值,从首项开始”),空数组或单元素数组直接返回原数组。提供 `filter()` 和 `for` 循环两种标准解法,并指出常见错误与修复要点。
在 JavaScript 中,提取数组中“每隔一个”的元素(即保留索引为偶数的项:0、2、3、4…)是一个典型的基础数组操作任务。题目要求:当输入为空数组或仅含一个元素时,直接返回原数组;否则,返回一个新数组,包含原数组中所有偶数索引位置(index % 2 === 0)的元素。
你最初的代码存在两个关键问题:
- i = +2 是赋值语句(等价于 i = 2),导致循环无限执行(i 始终被设为 2,不递增),最终只返回 array[0] 且立即退出函数;
- return array[i] 在循环内执行,意味着函数在第一次迭代就终止并返回单个元素(如 'a'),而非数组——这直接违反了题干“返回新数组”的要求。
✅ 正确解法一:使用 filter()(推荐,函数式、简洁、安全)
function makeAlternatingArray(array) {
if (array.length index % 2 === 0);
}
filter() 方法遍历数组,对每个元素调用回调函数;只有当回调返回 true 时,该元素才被保留在新数组中。此处我们利用第二个参数 index 判断是否为偶数索引,天然满足“从索引 0 开始交替取值”的需求。
✅ 正确解法二:使用 for 循环(显式控制,便于理解)
function makeAlternatingArray(array) {
if (array.length <p>关键修正:i += 2 实现步进递增(0 → 2 → 4…),并在循环外累积结果到新数组 result 中,最后统一返回。</p><p>⚠️ 注意事项: </p>
- 永远不要在循环内 return 元素值——这会提前终止函数;应先收集,再整体返回;
- filter() 不修改原数组,符合“返回新数组”的要求;push() 方案也明确创建新数组,避免副作用;
- 边界已由 if (array.length
✅ 验证示例:
console.log(makeAlternatingArray(['hey', 'hi'])); // → ['hey'] console.log(makeAlternatingArray(['a', 'b', 'c', 'd', 'e'])); // → ['a', 'c', 'e'] console.log(makeAlternatingArray([])); // → [] console.log(makeAlternatingArray([42])); // → [42]
掌握这两种写法,既能应对基础算法题,也为后续学习高阶数组方法(如 map、reduce)打下坚实基础。










