数组上的JavaScript头尾没有变异

时间:2016-02-12 11:16:10

标签: javascript arrays

我发现了JavaScript数组操作Unshift,shift,push,pop

然而,所有这些操作都会改变数组。

有没有办法可以使用这些功能而不会导致原始数据发生变异?

不知何故,我觉得阅读数据不应该导致变异。

4 个答案:

答案 0 :(得分:75)

您可以使用:

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

或者在ES6中:

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

答案 1 :(得分:8)

我会使用ES6,如下所示

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

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

alert(head(arr));

答案 2 :(得分:2)

接受的答案是好的,但是对于更具功能性的方法:

我使用find,它返回在谓词中返回true-thy值的第一个元素。

如果您确定您的价值观是真实的,您可以按如下方式编写:

arr.find(_ => true)

如果您想要第一个值,无论其值如何,您可以按如下方式编写它:

arr.slice(1);

正如其他人所述,使用切片

takeWhile

答案 3 :(得分:0)

一个人可以使用带有 Array Manipulating Features 的lodash插件。下面给出的某些 javascript函数操作无需更改原始数组。

var originalArray = ["Banana", "Orange", "Apple", "Mango"];

//Equivalent of Unshift
let unshiftedArray = _.concat(["Lemon", "Pineapple"],originalArray);
console.log("unshiftedArray",unshiftedArray);

//Equivalent of shift
let shiftedArray = _.tail(originalArray);;
console.log("shiftedArray",shiftedArray);

//Equivalent of push
let pushedArray = _.concat(originalArray,'Lemon');
console.log("pushedArray",pushedArray);

//Equivalent of push
let poppedArray = _.dropRight(originalArray);
console.log("poppedArray",poppedArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>