2016-02-12 59 views
16

我發現JavaScript陣列操作不移動,移位,推動,彈出JavaScript的頭部和尾部陣列沒有突變

但是,所有這些操作mutate數組。

有沒有一種方法可以使用這些函數而不會導致原始數據的突變?

不知怎的,我覺得閱讀數據不應該導致突變。

+0

你的意思是訪問索引?像'var test = [1,2,3,4]; var a = test [test.length - 1]'現在哪個'a'有最後一個元素? – JosephGarrone

+0

尾巴不是最後一個元素。索引器很容易。但我想編碼沒有索引器,只需訪問數組的頭部/尾部。 –

+3

不應該改變陣列的'push'應該做什麼? – JJJ

回答

41

您可以使用:

var head = arr[0]; 
var tail = arr.slice(1); 

或者在ES6:

const [head, ...tail] = arr; 
+1

簡單和重點:-)謝謝。 – SagiSergeNadir

1

接受的答案是好的,但對於一個功能更強大的方法:

首腦

我d使用find,它返回第一個在謂詞中返回true-thy值的元素。

如果你確定你的價值觀是真實的,你的,你可以按如下寫:

arr.find(Boolean) 

如果你想第一個值,而不管其價值的,可以如下寫:

arr.find(_ => true) 

尾巴

正如其他狀態時,請使用切片

arr.slice(1); 
1

我會做使用ES6如上

const head = ([h]) => h; 
const tail = ([, ...t]) => t; 

const arr = [1,2,3,4,5]; 

alert(head(arr));