获取数组中的第一个和最后一个元素,ES6方法

37

let array = [1,2,3,4,5,6,7,8,9,0]

这里是文档

[first, ...rest] = array会输出数组的第一个元素1和其他剩余的元素

那么,有没有一种方法可以使用Destructuring只获取第一个和最后一个元素1 & 0

例如:[first, ...middle, last] = array

我知道如何用另一种方式获取第一个和最后一个元素,但我想知道是否有es6的方法。


2
在 rest 参数之后不能有其他参数。 - Egor Stambakio
6
让{0: first,[array.length-1]: last} = array; - Bergi
我认为这是 https://dev59.com/JlwY5IYBdhLWcg3wD0PG 的副本。 - Amous
@Bergi 嗯,是的,那是一种干净的方式。 - Nicholas
5
首先: [first] = [ 1, 2, 3, 4 ].slice(0, 1)最后: [last] = [ 1, 2, 3, 4 ].slice(-1) - Joshua Pinter
1个回答

49

rest参数只能在解构的结尾使用,而不能在其他任何地方使用,因此它不会按照您的期望工作。

相反,您可以解构某些属性(在JS中,数组也是一个对象),例如用0表示第一个元素,用最后一个元素的索引表示最后一个元素。

let array = [1,2,3,4,5,6,7,8,9,0]

let {0 : a ,[array.length - 1] : b} = array;
console.log(a, b)

或者更好的方法是提取长度作为另一个变量,并根据它获取最后一个值(由@Bergi建议),即使没有引用数组的变量也可以使用。

let {0 : a ,length : l, [l - 1] : b} = [1,2,3,4,5,6,7,8,9,0];
console.log(a, b)


4
FYI,它是一个休息符号而不是扩展符号,并且它不是一个运算符,只是语法。 - loganfsmyth
3
嗯,是的,但不要那样做。 let a = array [0],b = array [array.length-1]; 更加简洁清晰。如果我们真的想让它尽可能简洁,还有let {0:a, length:l, [l-1]:b} = array; - Bergi
@bergi 是 l 在赋值给 b 之前被定义的吗? - Pranav C Balan
1
是的,它严格从左到右进行评估。 - Bergi
@bergi 谢谢,现在我明白了 :) - Pranav C Balan
const { 0: first, [array.length - 1]: last, ...middle } = array;
console.log(first, Object.values(middle), last);
- codeBelt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接