如何实现不依赖数组方法的自定义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
原代码的其他问题说明
- 仅给单个
source对象添加push2,其他数组无法调用这个方法,复用性差 - 使用了
...param展开运算符,若严格要求不使用任何数组相关方法,改用arguments遍历更符合要求 - 返回值不符合原生API规范,导致课程测试环境的校验逻辑不通过
内容的提问来源于stack exchange,提问作者Artem
相关产品推荐
相关产品推荐

