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

测试自定义数组原型方法yarra是否实现原地反转数组

你的yarra方法实现完全正确!

先给你吃个定心丸:你写的这个数组原型方法完美实现了原地反转数组的需求,并且返回值的行为也和原生Array.prototype.reverse()保持一致。

为什么它是正确的?

  • 原地操作的核心逻辑没问题:
    你用了经典的双指针思路,左指针从数组头部(left=0)、右指针从数组尾部(right=this.length-1)开始,每次交换两个指针指向的元素,然后向中间移动指针,直到左指针超过右指针时停止。整个过程没有创建新数组,所有修改都直接作用在原数组本身,完全符合「原地反转」的要求。
  • 元素交换的写法高效且正确:
    用ES6解构赋值[this[left], this[right]] = [this[right], this[left]]来交换元素,既简洁又不需要额外的临时变量,是现代JS里很优雅的写法,逻辑上没有任何问题。
  • 返回值符合预期:
    方法最后返回this,这和原生reverse()的行为完全一致——原生方法也是原地反转后返回原数组的引用,而不是返回一个新数组。

补充一个完整的测试用例验证

你可以把测试代码补全来进一步确认:

// 你的yarra方法
Array.prototype.yarra = function () { 
  for (let left=0, right=this.length-1; left<right; left++, right--) { 
    [this[left], this[right]] = [this[right], this[left]] 
  } 
  return this 
};

// 测试代码
describe('yarra', function () {
  it('should reverse an array in place and return the original array reference', function() {
    const testArr = [1, 2, 3, 4, 5];
    const result = testArr.yarra();
    
    // 验证数组内容被反转
    expect(testArr).toEqual([5, 4, 3, 2, 1]);
    // 验证返回的是原数组引用
    expect(result).toBe(testArr);
    // 验证空数组也能正常处理
    expect([].yarra()).toEqual([]);
    // 验证单元素数组无变化
    expect([10].yarra()).toEqual([10]);
  });
});

这些测试用例都能通过,进一步证明你的实现是正确的。

小提醒(仅作为学习延伸)

作为学习练习,给数组原型扩展方法完全没问题,但在实际项目中,直接扩展原生原型可能会带来命名冲突等问题。如果要在项目里做类似的扩展,建议用Symbol来定义方法名,避免和其他代码冲突~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:33:18