让我们来探索JavaScript中的Slice(), Splice()和Spread Syntax()

183 阅读3分钟
  • 图像.png 约翰·保罗·萨默斯( John Paul Summers)Unsplash上的照片

    我遇到了这个freeCodeCamp挑战,并在思考如何找到解决它的方法时陷入困境。他们已经提到使用 Slice & Splice 解决问题。当时我很困惑什么时候用Slice,什么时候用Splice。

    在这里,我将分享我如何用这些方法解决它。

    Slice 和 Splice 都用于操作数组。让我们看看他们是如何做到的。

    片段:

    Slice 方法接受 2 个参数。

    第一个参数:指定应从何处开始选择。

    例如:

    var arr1 = [1,5,8,9];
    arr1.slice(1); // [5,8,9]
    

    从第一个索引 (5) 开始,它将返回元素。

    第二个参数:指定端点应该处于哪个级别。如果在调用 slice 方法时没有将它放在括号中,它将返回从起始索引到数组末尾的元素。

    var arr1 = [1,5,8,9];console.log(arr1.slice(1,3));
    //[ 5, 8 ]
    

    如果您在调用时输入负数,则将从数组的末尾选择选择。

    var arr1 = [1,5,8,9];
    console.log(arr1.slice(-2));
    //[ 8, 9 ]
    

    注意:切片总是从数组中返回选定的元素。

    Slice 不会改变数组。阵列保持不变。请参阅以下示例:

    var arr1 = [1,5,8,9];arr1.slice(2);console.log(arr1);
    // [ 1, 5, 8, 9 ]
    

    即使您对数组进行了一些更改,它也不会影响它。它将返回最初的原始数组。

    拼接:

    它可以接受多个参数。

    这意味着,

    第一个参数:指定应在哪个位置添加/删除新元素或现有元素。如果值为负,则将从数组末尾开始计算位置。

    第二个参数:要从起始位置移除的元素数量。如果为 0,则不会删除任何元素。如果没有通过,它将从起始位置删除所有元素。

    var arr1 = [1,5,8,9];console.log(arr1.splice(1,2));
    // [ 5, 8 ]
    

    3rd Argument ->nth Argument:要添加到数组中的项目的值。

    var arr1 = [1,5,8,9];console.log(arr1.splice(1,2,'Hi','Medium'));
    // [5,8]
    

    您可能认为我们已将 'Hi'、'Medium' 添加到数组中,但此处并未显示...。对?

    是的,我们已经安慰了arr1.splice(1,2,'Hi','Medium')。

    笔记:

    • Splice 将仅返回从数组中删除的元素。
    • Splice 会改变原来的数组
    var arr1 = [1,5,8,9];arr1.splice(1,2,'Hi','Medium');console.log(arr1);
    // [ 1, '嗨', '中', 9 ]
    

    传播语法:

    定义:允许在预期零个或多个参数(用于函数调用)或元素(用于数组文字)的地方扩展诸如数组表达式或字符串之类的可迭代对象,或在零个或多个地方扩展对象表达式键值对(用于对象文字)是预期的。

    让我们举一个例子:

    var arr1 = [1,3,6,7];
    var arr2 = [5,arr1,8,9];
    控制台日志(arr2);
    // [ 5, [ 1, 3, 6, 7 ], 8, 9 ]
    

    我希望它像**[5, 1, 3, 6, 7, 8, 9 ]**这样的单个数组

    我可以使用这个Spread语法来解决这个问题:

    var arr1 = [1,3,6,7];
    var arr2 = [5,...arr1,8,9];
    console.log(arr2);// [ 5, 1, 3, 6, 7, 8, 9 ] 
    

    Spread 语法的另一个主要用途是复制数组:

    无功 arr = [1, 2, 3];
    var arr2 = arr;
    arr2.push(4);
    控制台日志(arr2);
    // [ 1, 2, 3, 4 ]
    控制台日志(arr);
    // [ 1, 2, 3, 4 ]
    

    我只在arr2 中添加了“ 4 ” 。但它也对 arr 进行了更改。

    我们可以使用Spread语法解决这个问题,如下所示......

    无功 arr = [1, 2, 3];
    var arr2 = [...arr];
    // 像 arr.slice()arr2.push(4);
    控制台日志(arr2);
    // [ 1, 2, 3, 4 ]
    控制台日志(arr);
    // [ 1, 2, 3]
    

    您可以参考MDN文档了解有关 Spread 语法的更多信息。

    那么,让我们来看看挑战。

    函数 frankenSplice(arr1, arr2, n) {
        // 它还活着。它还活着!
        let array2Copy = [...arr2]; 
        array2Copy.splice(n,0, ...arr1);             
        //console.log(array2Copy);
        返回数组2复制;
    }
    frankenSplice([1, 2, 3], [4, 5, 6], 1);
    

    此挑战的主要条件是“在函数执行后不应更改 arr1/arr2”。

    因此,创建了一个arr2副本数组,使用 splice****方法将 arr1 添加到名为array2Copy的 arr2 副本中**。**

    定论:

    ->切片方法将

    • 从数组中返回选定的元素
    • 取 2 个参数
    • 不改变原始数组

    ->拼接方法将

    • 返回数组中删除的元素
    • 接受多个参数
    • 改变原始数组