詳解JS數組截取不改變原數組

一、JS改變原數組和返回新數組

在JS中,截取數組可以使用數組的slice()方法,這個方法不會改變原數組,而是返回一個包含指定位置元素的新數組。這個方法的語法如下所示:

array.slice(start, end)

其中,start參數表示起始位置,end參數表示結束位置。start和end都是可選參數,start默認從0開始取,end默認去到數組結尾。

如果end是負數,它表示從末尾開始的位置。如果start和end都是負數,則將它們轉換為相應的正數,例如,-3將轉換為array.length – 3。

需要注意的是,截取後的數組是不包含end位置的,這也是與slice方法的不同之處。

二、截取數組數據不改變元素值

除了返回新數組,JS中還有一種方法可以截取數組不改變原數組的元素值,它就是使用concat()方法。該方法創建一個新數組,該數組是由兩個或多個數組組合而成的。這個方法的語法如下所示:

array.concat(array1, array2, ..., arrayX)

其中,array1, array2, …, arrayX是要合併的數組。如果想要截取指定位置的元素值,我們可以將原數組截取成兩個部分,再將兩個部分按需要合併起來。例如,取出原數組下標為2到下標為4的元素值如下所示:

var arr = [0, 1, 2, 3, 4, 5, 6];
var arr1 = arr.slice(2, 5);
var arr2 = arr.slice(5);
var result = arr1.concat(arr2);
console.log(result); // [2, 3, 4, 5, 6]

這裡使用了slice()方法截取了arr數組的2~4下標位置的元素,同時也截取了5~6位置的元素,再將這兩個部分合併起來就得到了結果。

三、JS裁剪數組改變原數組

JS中還有一種數組截取方法是通過截取原數組來改變其值。這個方法是Array.prototype.splice()方法。splice()方法修改原數組並返回刪除的元素,它的語法如下所示:

array.splice(start, deleteCount, item1, item2, ...)

其中,start表示一個整數,在該位置插入/刪除元素。如果start大於數組的長度,則不會刪除任何元素。deleteCount表示要刪除的元素個數。如果deleteCount為0,則不會移除元素。

如果要插入一些元素,則需要在start和deleteCount參數之後指定這些元素,注意:這些元素將成為數組的新元素,並置於刪除的元素的位置。如果指定了多個元素,則將依次插入每個元素。

例如,刪除原數組下標為2~4的元素值如下所示:

var arr = [0, 1, 2, 3, 4, 5, 6];
var removed = arr.splice(2, 3);
console.log(arr); // [0, 1, 5, 6]
console.log(removed); // [2, 3, 4]

這裡通過splice()方法截取了arr數組的下標為2~4的元素值,並返回了被刪除的元素。此時原數組arr已經改變了。

四、不改變原數組的截取方法

除了上述三種截取數組的方法之外,JS中還有其他不改變原數組的截取方法,這裡我們將介紹其中的三種。

1、使用map()方法

map()方法會創建一個新數組,該數組將調用每個元素上的函數的結果作為新數組的元素。

var arr = [1, 2, 3];
var result = arr.map(function(item){
  return item * 2;
});
console.log(result); // [2, 4, 6]

2、使用filter()方法

filter()方法創建一個新數組,其中包含滿足某個條件的原數組中的所有元素。它的語法如下所示:

array.filter(callback[, thisArg])

其中,callback是用於測試每個元素的函數,返回true時保留該元素,false則刪除該元素。thisArg是執行callback函數時使用的this對象。

var arr = [1, 2, 3, 4, 5, 6];
var result = arr.filter(function(item){
  return item % 2 === 0;
});
console.log(result); // [2, 4, 6]

3、使用reduce()方法

reduce()方法對數組中的每個元素執行一個提供的函數,並將結果匯總為單個值。它的語法如下所示:

array.reduce(callback[, initialValue])

其中,callback是一個函數,接受四個參數:accumulator(累加器),currentValue(當前值),currentIndex(當前索引),array(原數組)。initialValue是作為第一次調用callback函數時的第一個參數值。如果沒有提供initialValue,則使用數組的第一個元素作為累加器的初始值。

var arr = [1, 2, 3, 4];
var result = arr.reduce(function(accumulator, currentValue){
  return accumulator + currentValue;
});
console.log(result); // 10

總結

以上就是JS數組截取不改變原數組的一些方法,它們分別是使用slice()方法返回新數組、使用concat()方法截取數組不改變元素值、使用splice()方法裁剪數組改變原數組、使用map()、filter()和reduce()方法截取數組不改變原數組等。這些方法可以根據實際需求使用,以實現最佳的數據截取效果。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246875.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:17
下一篇 2024-12-12 13:17

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字符串進行格式化處理。 names = [‘A…

    編程 2025-04-29
  • Java創建一個有10萬個元素的數組

    本文將從以下方面對Java創建一個有10萬個元素的數組進行詳細闡述: 一、基本介紹 Java是一種面向對象的編程語言,其強大的數組功能可以支持創建大規模的多維數組以及各種複雜的數據…

    編程 2025-04-28
  • Python數組隨機分組用法介紹

    Python數組隨機分組是一個在數據分析與處理中常用的技術,它可以將一個大的數據集分成若干組,以便於進行處理和分析。本文將從多個方面對Python數組隨機分組進行詳細的闡述,包括使…

    編程 2025-04-28

發表回復

登錄後才能評論