
该教程详解如何实现 makealternatingarray 函数,使其返回原数组中索引为 0、2、4… 的交替元素(即所有偶数索引位置的值),并修正常见错误如 i=+2 的语法误用和过早 return 导致只取首项的问题。
该教程详解如何实现 makealternatingarray 函数,使其返回原数组中索引为 0、2、4… 的交替元素(即所有偶数索引位置的值),并修正常见错误如 i=+2 的语法误用和过早 return 导致只取首项的问题。
在 JavaScript 中,提取数组中“每隔一个”的元素(从索引 0 开始)是一个典型的基础操作。题目要求:对任意输入数组,返回一个新数组,仅包含原数组中索引为偶数(0, 2, 4, …)的元素;若原数组长度 ≤ 1,则直接返回原数组。
你最初的代码存在两个关键问题:
- i = +2 是赋值表达式(等价于 i = 2),会导致无限循环或跳过逻辑——正确写法应为 i += 2 或 i = i + 2;
- 在 for 循环内使用 return array[i] 会立即退出函数,只返回第一个匹配元素(如 'a'),而非累积结果。
✅ 正确解法需满足:
- 不修改原数组;
- 构建并返回一个新数组;
- 遍历所有偶数索引,并收集对应元素。
✅ 推荐方案一:使用 filter()(函数式、简洁清晰)
function makeAlternatingArray(array) {
if (array.length index % 2 === 0);
}
filter() 方法遍历数组每一项,回调函数接收 (element, index)。我们忽略元素值(用 _ 占位),仅根据 index % 2 === 0 判断是否保留——即只保留索引为偶数的项。该写法语义明确、无副作用,且自动处理空数组与边界情况。
✅ 推荐方案二:传统 for 循环(过程式、易于理解)
function makeAlternatingArray(array) {
if (array.length <p>注意:i += 2 是递增写法(等价于 i = i + 2),确保每次跳过下一个元素;result 数组在循环外声明,逐步 push,最终统一 return。</p><h3>⚠️ 常见错误提醒</h3>
- ❌ i = +2 → 赋值操作,非递增,将使 i 恒为 2,造成逻辑崩溃;
- ❌ return array[i] 在循环内 → 函数立即终止,无法累积结果;
- ❌ 直接修改原数组(如 splice)→ 违反“返回新数组”要求,影响调用方数据安全。
✅ 测试验证
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]
无论选用 filter 还是 for 循环,核心在于理解索引规律(偶数索引 → i % 2 === 0)和避免过早返回。掌握这两种实现方式,既能写出简洁现代的代码,也能夯实底层遍历逻辑,是进阶数组操作的重要一步。










