手写题——实现 unshift()

回顾 unshift

unshift() 方法将指定元素添加到数组的开头,并返回数组的新长度。

该方法的调用直接修改原数组,即原数组内容发生变化。

用法示例
let arr1 = [1, 2, 3, 4];
console.log(arr1.unshift(7, 8, 9)); // 7
console.log(arr1); // [7, 8, 9, 1, 2, 3, 4]

let arr2 = [1, 2, 3, 4];
arr2.unshift(7);
arr2.unshift(8);
arr2.unshift(9);
console.log(arr2); // [9, 8, 7, 1, 2, 3, 4]

手写 customUnshift 的思路

  1. 确定新元素数量
  2. 将原数组中的旧元素依次往后挪,给新元素腾出空间
  3. 逐一将新元素放置在开头
  4. 保持引用不变
  5. 返回新长度

注意这里只考虑 unshift() 被数组调用的情况,不考虑被类数组对象使用。

代码实现

let arr = [1, 2, 3, 4];

Array.prototype.customUnshift = function (...elements) {
  for (let i = this.length - 1; i >= 0; i--) {
    this[i + elements.length] = this[i];
  }

  for (let i = 0; i < elements.length; i++) {
    this[i] = elements[i];
  }

  return this.length;
};

console.log(arr.customUnshift(7, 8, 9)); // 7
console.log(arr); // [ 7, 8, 9, 1, 2, 3, 4 ]

 

解析

  1. 原数组 arr 的长度为4,新元素的长度为3。要把数字1 2 3 4往后挪出三个位置
  2. 第一次迭代就是挪位置。把数字1挪到索引为3的地方,把数字2挪到索引为4的地方,以此类推
    第一次迭代后的结果为 arr = [1, 2, 3, 1, 2, 3, 4]
  3. 第二次迭代,开始将数字7 8 9代替掉最开头的1 2 3
    第二次迭代后的结果为 arr = [7, 8, 9, 1, 2, 3, 4]
  4. 注意所有的操作都在原数组上,因为unshift()就是根本上改变了原数组,而不是新起一个数组
  5. 最后返回最新的数组长度
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值