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

如何实现不依赖数组方法的自定义push?测试环境差异问题求助

自定义实现数组push方法(不使用数组方法)及测试不通过问题修复

你的代码在本地测试通过但课程环境失败,核心问题是返回值不符合原生push方法的规范,另外还有方法复用性的问题,以下是具体修复方案:

问题分析

原生Array.push()的返回值是添加元素后数组的新长度,但你的push2返回的是数组本身,这是测试环境校验不通过的关键。此外,你当前仅给单个source实例添加方法,无法复用给其他数组,且用到了展开运算符(属于数组相关语法),如果严格要求不使用任何数组方法,也需要调整。

修正后的通用实现

把方法挂载到Array.prototype上,让所有数组实例都能使用,同时严格遵循原生API的返回规则,且不使用任何数组方法:

Array.prototype.push2 = function() {
  // 遍历所有传入的参数,用arguments获取(不依赖数组方法)
  for (let i = 0; i < arguments.length; i++) {
    // 利用数组length特性,直接给末尾位置赋值
    this[this.length] = arguments[i];
  }
  // 返回新数组的长度,符合原生push的返回规范
  return this.length;
};

测试验证

用你的测试用例验证:

const source = [1, 2, 3];
// 调用push2,返回值是新长度6
const newLength = source.push2(72, 12, 41);
// 数组内容符合预期
console.log(source); // [1, 2, 3, 72, 12, 41]
console.log(newLength); // 6

原代码的其他问题说明

  1. 仅给单个source对象添加push2,其他数组无法调用这个方法,复用性差
  2. 使用了...param展开运算符,若严格要求不使用任何数组相关方法,改用arguments遍历更符合要求
  3. 返回值不符合原生API规范,导致课程测试环境的校验逻辑不通过

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:39:53