数组上的JavaScript头和尾没有变异

数组上的JavaScript头和尾没有变异,javascript,arrays,Javascript,Arrays,我找到了关于JavaScript数组操作的Unshift、shift、push和pop 但是,所有这些操作都会改变数组 有没有一种方法可以在不引起原始数据突变的情况下使用这些函数 不知何故,我觉得读取数据不应该导致突变。您可以使用: var head = arr[0]; var tail = arr.slice(1); 或在ES6中: const [head, ...tail] = arr; 公认的答案是好的,但对于更实用的方法: 头 我将使用find,它返回第一个元素,该元素在其谓词中返回

我找到了关于JavaScript数组操作的Unshift、shift、push和pop

但是,所有这些操作都会改变数组

有没有一种方法可以在不引起原始数据突变的情况下使用这些函数

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

您可以使用:

var head = arr[0];
var tail = arr.slice(1);
或在ES6中:

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

公认的答案是好的,但对于更实用的方法:

头 我将使用find,它返回第一个元素,该元素在其谓词中返回true thy值

如果你确信你的价值观是真实的,你可以这样写:

arr.find(Boolean)
arr.find(_ => true)
如果需要第一个值,无论其值如何,都可以按如下方式编写:

arr.find(Boolean)
arr.find(_ => true)
尾巴 正如其他人所说,使用slice

arr.slice(1);

我会像下面那样使用ES6

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

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

alert(head(arr));

您可以使用lodash插件,该插件附带阵列操作功能。下面给出的一些javascript函数操作没有改变原始数组

var originalArray=[“香蕉”、“橘子”、“苹果”、“芒果”];
//非移位的等价物
让unshiftedArray=[柠檬,菠萝],原始数组;
日志(“unshiftedArray”,unshiftedArray);
//等效移位
设shiftedArray=u.tail(originalArray);;
log(“shiftedArray”,shiftedArray);
//推的等价物
让pushedaray=u.concat(原始数组,'Lemon');
控制台日志(“pushedaray”,pushedaray);
//推的等价物
让poppedArray=u0.dropRight(原始数组);
日志(“poppedArray”,poppedArray)

你的意思是只访问索引?像
var检验=[1,2,3,4];var a=test[test.length-1]
其中
a
现在有最后一个元素?尾部不是最后一个元素。是的,索引器很简单。但是我想在不使用索引器的情况下编写代码,只访问数组的头/尾。不改变数组的
push
应该做什么?pop()和shift()的全部要点是它们从数组中删除项。数组的要点是它有数字索引项-为什么你试图通过避免使用索引来使事情复杂化?我不会让那些投票人失望(必须向上投票来否定他们)。或者是因为他们不知道FP是什么?如果你想得到最新的项目,你可以执行arr.slice(-1)[0](与pop()类似,但不改变它)。ES6选项中使用的语法类型的名称是什么?@lalilulelost这是一个数组分解和。。。这是一次聚会。