抽象轻松JavaScript

随心所欲的数组切割与改变2.0版本

splice(开始位置,删除数量,添加内容)

slice(开始位置,结束位置)

目的,上面的一串小字,切割与改变

切割代表删,改变代表增、改,随心所欲的切割与改变意味着不像pop,push一样有局限性(还是有一点的),2.0版本,代表这是优化后的内容

局限性,它们是内置数组对象函数,翻译一下就是数组方法,只能用于数组(不是数组转换成数组【展开语法,Array构造函数等,split拆解】)

第二点,它们的取值范围不同,可以从用法中看出来,一个是开始位置,删除数量,另一个是开始位置,结束位置

如果它们一样,我为什么要用两个不相同的语句来描述它们?

它们的本质区别是有没有取到右极端数(第二个值)

抽象轻松JavaScript_第1张图片

上面是下标元素,实际上是6个元素,开始为1,结束为5

    let arr = [0,1,2,3,4,5];
    let i = arr.slice(1,5);
    let z = arr.splice(1,5);
    console.log(i);
    console.log(z);

抽象轻松JavaScript_第2张图片

 前者slice不取右极端数,splice取右极端数(删除多少,就是多少个)

局限性小总结

数组切割的局限性,包括了数据类型与取值范围

区别,其实取值的范围应该是算在区别中的,但是局限性里说也不会有很大问题,毕竟这也确确实实是

第一点,对数组的影响

这两个方法是会影响数组的。

    let arr = [0,1,2,3,4,5];
    let z = arr.splice(1,5);
    console.log(z);
    console.log(arr);
    let arr = [0,1,2,3,4,5];
    let z = arr.slice(1,5);
    console.log(z);
    console.log(arr);

 抽象轻松JavaScript_第3张图片

抽象轻松JavaScript_第4张图片

 通过结果来猜一猜哪个图片是splice哪个图片是slice

*

*

*

公布答案,先说方法,取右极端数的是splice,没有的是slice

第一张是splice,第二张是slice

说明里splice的功能不仅仅大,它的副作用还大,它会直接改变原有数组

返回值,它们会

所以当你这么写代码的时候

    let arr = [0,1,2,3,4,5];
    let z = arr.splice(1,5);
    let i = arr.slice(1,5);
    console.log(z);
    console.log(i);

抽象轻松JavaScript_第5张图片

 为什么会出现这种情况了吧,因为splice改变了1下标到5下标的元素,导致原数组没有,而slice返回的是删除值,原数组都没有1~5下标的原始,slice拿什么切割!

就像小麦没了,你拿着镰刀也没办法,只能干站着

说到返回值,这俩的返回值是一样,都是返回被删除的数,所以出现空数组不必担心,不是代码问题,是你没有删除内容

splice功能强大,缺点也不少,它比slice多了一个添加内容,你想要多少个添加内容就有多少个

添加在开头,那我们的下标肯定是从0开始的,那是我们又不需要删除值,例子如下

抽象轻松JavaScript_第6张图片

 看完上面的内容,再来说说为什么会有空数组的出现,应该就没有荒了吧!

那在上面的基础上,我们来写一个数组移动方法吧!

方法在基本类型中有一个常见的名词——函数,方法 === 函数

进阶内容

    function yidong(a,s,y){
        let newA = [...a];
        let zhi = newA.splice(s,1);//获取s的值,要删除原有的值,原数组已经改变了
        newA.splice(y,0,...zhi);//这一步相当于补漏洞,所以没必要删除
        //展开语法是为了把zhi数组的内容展开出来使用
        return newA
    };
    let arr = [1,2,3,4,5]
    console.log(yidong(arr,1,3));

抽象轻松JavaScript_第7张图片 

总结

核心数组的运用

数组方法,splice(),slice

局限性:数据类型只能是数组(可以通过改变数据类型达到),取值范围——右极端数

区别:splice功能强大,即删,又可增、改,但是会改变原有数组

           slice只能功能单一,但不会破坏原数组

数组的切割与改变

你可能感兴趣的:(抽象js,javascript,开发语言,ecmascript)