Javascript 如何在不改变原始数组的情况下拼接数组

Javascript 如何在不改变原始数组的情况下拼接数组

在这篇文章中,我们将讨论如何从数组中提取一定范围的元素,而不改变原始数组。在这里,改变意味着对原始数组进行修改。有一个内置函数可用于从数组中提取元素,但它会改变数组。

splice() 方法如何工作?

splice() 方法用于从数组中提取一定范围的元素。它接受三个参数,分别是索引(第一个参数)、要删除的元素数量(可选参数),以及要追加的元素数组(可选参数)。这个方法会在删除元素后返回一个新的数组,并改变原始数组。

示例: 下面的示例展示了它是如何改变原始数组的。

// Creating an array 
let originalArr = ["c", "cpp", "java", 
    "python", "javascript", "kotlin"];
 
// Extracting three items from the index 0
let extractedArr = originalArr.splice(0, 3);
 
// Printing the Extracted array
console.log("Extracted Array: " + extractedArr);
 
// Printing the original Array
console.log("Original Array: " + originalArr);

输出

Extracted Array: c,cpp,java
Original Array: python,javascript,kotlin

我们可以通过以下方法来实现:

  • 使用数组的副本
  • 使用filter方法
  • 使用slice()方法

方法1:使用数组的副本

在这种方法中,我们将创建原始数组的副本,然后使用splice方法来提取元素。可以使用spread操作符或splice方法来创建数组副本或克隆。

步骤:

  • 使用spread操作符或slice方法创建数组的副本。
  • 对克隆的数组应用splice方法,并返回提取的数组。

示例:

// Creating an array 
let originalArr = ["c", "cpp", "java",
    "python", "javascript", "kotlin"];
 
// Creating the clone of the array
let cloneArr = originalArr.slice(0);
 
// Or you can use spread Operator
// let cloneArr = [...originalArr]
 
// Extract the array using splice method
let extractedArr = cloneArr.splice(0, 4);
 
// Printing the Extracted array
console.log("Extracted Array");
console.log(extractedArr);
 
// Printing the original Array
console.log("Original Array");
console.log(originalArr);

输出

Extracted Array
[ 'c', 'cpp', 'java', 'python' ]
Original Array
[ 'c', 'cpp', 'java', 'python', 'javascript', 'kotlin' ]

这里原始数组不会被改变。但是在较大的数组中应用这种方法并不是一个好的做法,因为当我们创建数组的克隆时,它会增加空间消耗。

方法2:使用filter方法

在这种方法中,我们使用JavaScript的filter方法。filter方法用于在应用某种条件后过滤出数组的元素。该方法不会改变数组。

语法:

Array.filter((item, index)=>{ return index >= start   
&& index < howMany + start })  

示例1:

// Creating an array 
let originalArr = ["c", "cpp", "java", 
                   "python", "javascript", 
                   "kotlin"];
 
let start = 1;
let howMany = 3;
 
let extractedArr = 
    originalArr.filter((item, index) => {
        return index >= start && index < howMany + start;
})
 
// Printing the Extracted array
console.log("Extracted Array");
console.log(extractedArr);
 
 
// Printing the original Array
console.log("Original Array");
console.log(originalArr);

输出

Extracted Array
[ 'cpp', 'java', 'python' ]
Original Array
[ 'c', 'cpp', 'java', 'python', 'javascript', 'kotlin' ]


示例2: 在原型形式中

// Creating an array 
let originalArr = ["c", "cpp", "java", 
                   "python", "javascript", 
                   "kotlin"];
 
Array.prototype.mySplice = 
    function (start, howMany) {
    return this.filter((item, index) => {
        return index >= start && index < howMany + start;
    })
}
 
// Printing the Extracted array
console.log("Extracted Array");
console.log(originalArr.mySplice(1, 3));
 
// Printing the original Array
console.log("Original Array");
console.log(originalArr);

输出

Extracted Array
[ 'cpp', 'java', 'python' ]
Original Array
[ 'c', 'cpp', 'java', 'python', 'javascript', 'kotlin' ]

方式3: 使用 slice()方法

Javascript arr.slice() 方法返回一个包含所实施的数组的一部分的新数组。原始数组保持不变。

示例:

let arr = [10, 20, 30, 40, 50, 
           60, 70, 80, 90, 100];
let clonedArray = arr.slice(0);
let splicedArray = clonedArray.splice(1, 6);
console.log(arr);
console.log(splicedArray);

输出

[
  10, 20, 30, 40,  50,
  60, 70, 80, 90, 100
]
[ 20, 30, 40, 50, 60, 70 ]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程