Javascript常用的数组方法实现

初识数据结构

数据结构是算法入门基础,可以更快更好的帮我们处理一些程序逻辑上的问题。

之前接触过数据结构,所以有一个大概的印象,但是没怎么刷过题,趁着暑假赶紧回顾,所有代码都是用JavaScript来进行算法描述,今天就开始正式回顾算法了,如果代码中哪里有错误请及时指出,感谢。

数组

js为我们对数组的操作提供了很多内置方法

array.push()和array.unshift()

参数:参数为向数组中添加的内容,可以为一个或多个,不限制类型

结果:push向数组末尾添加元素,unshift向数组头部添加元素,都会改变原数组

返回值:数组添加完之后的长度

如何实现?

思路:

①push的实现将数组的长度当作索引,之后进行赋值

Array.prototype.myPush = function(){
	for(let i=0;i<arguments.length;i++){
       this[this.length] = arguments[i];
   }
    return this.length
}

②unshift需要在数组的头部添加一个或多个,所以需要将后面的其它元素都向后移一位

Array.prototype.myUnshift = function() {
    //unshift的实现需要两步
    //第一步将原数组中的所有元素向有移动(距离为添加的内容长度)
    //第二步将添加的内容依次放入之前按的空位中
	let num = arguments.length;
    for( let i = 0; i < num; i++ ){
      this[i+num] = this[i];
    }
    for( let j = 0; j < num ; j++){
      this[j] = arguments[j];
    }
    return this.length
}

array.pop()和array.shift()

pop方法删除数组的最后一个元素,返回值为被删除的元素,会改变原数组

shift方法删除数组的最后一个元素,返回值为被删除的元素,会改变原数组

这两个方法都不接收参数,返回值为被删除的元素

实现方法:

 // pop的实现
        Array.prototype.myPop = function () {
            let tailEle = this[this.length - 1];
            this.length--;
            return tailEle;
        }
//shift的实现 
//先将所有元素向前移动一位,再将length-1
Array.prototype.myShift = function () {
            let headEle = this[0];
            for (let i = 1; i < this.length; i++) {
                this[i - 1] = this[i]
            }
            this.length--;
            return headEle;
        }

splice和concat

splice和concat都可以返回一个新数组

splice的功能非常大,可以删除指定位置的数组元素,也可以向指定位置添加数组元素,使用该方法会改变原数组

参数描述
index必需。整数,规定添加或者删除的位置,支持以负数为索引,为负数则表示从末尾开始
howmany必需。需要删除的项目数量,设置为0则不会删除元素
item,…,itemX可选,添加的具体元素

返回值为数组,如果是删除的有元素,则数组中内容为删除的元素,其它情况数组都是空数组。

let arr = [1,2,3,4,5]
//添加元素
let result = arr.splice(1,0,4444,5555)
console.log(arr)
console.log(result)
//arr:1,4444,5555,2,3,4,5
//result: []

//删除元素
let result2 = arr.splice(1,2)
console.log(arr)
console.log(result2)
//arr:1,2,3,4,5
//result:[4444,5555]

splice的实现:

 <script>
        function mySplice(index, howmany, ...items) {

            // 先做类型判断,确保输入的都为数字
            if (typeof index !== 'number' || typeof howmany !== 'number') {
                console.log('请检查输入的类型');
                return;
            }
            //剩余参数的数组长度
            let len = items.length;
            // 执行删除操作,将范围内的元素删除,也就是将后面的向前移动
            if (howmany !== 0) {
                // 用于保存返回值的数组
                let result = [];
                // 将删除的元素保存到数组中,后续作为返回值
                for (let i = index; i < index + howmany; i++) {
                    result[result.length] = this[i];
                }
                // 从删除的最后一个位置的下一位开始到原数组末尾,依次向前移动howmany个位置
                for (let m = index + howmany; m < this.length; m++) {
                    this[index++] = this[m];
                }
                //将数组的长度删除删除howmany个长度,
                this.length = this.length - howmany;
                return result
            }
            // 添加元素
            if (howmany === 0 && len > 0) {
                // 说明此时是在指定位置添加元素
                // 将数组索引为index的位置向后移动howmany的值,并将items添加进去
                //需要注意的是应该从数组的最后开始移动,否则可能会出现赋值错误的情况

                //还是分为两步,第一步将数组拆分,需要移动的向后移动
                for (let j = this.length - 1; j >= index; j--) {
                    this[j + len] = this[j];
                }
                for (let k = 0; k < len; k++) {

                    this[index++] = items[k];
                }
                // 数组长度自己会增加
                //返回值为空
                return []
            }
        }
        Array.prototype.mySplice = mySplice;
        let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        // let result = arr.mySplice(1, 3)
        let result2 = arr.mySplice(2, 0, 44, 44)
        console.log(result2);
        console.log(arr);
    </script>

cnocat的实现:

<script>
        function myConcat(...items) {
            for (let i = 0; i < items.length; i++) {
                for (let j = 0; j < items[i].length; j++) {
                    this[this.length] = items[i][j]
                }
            }
            return this
        }
        Array.prototype.myConcat = myConcat;
        let arr = [1, 2, 3];
        let newArr = [4, 5, 6];
        let newArr2 = [7, 8, 9]
        let result = arr.myConcat(newArr, newArr2);
        console.log(result);
    </script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值