you them pass operator objects es6 during both assignment array ecmascript-6 destructuring

ecmascript 6 - them - Desestructuración para obtener el último elemento de una matriz en es6



spread operator javascript (7)

En coffeescript esto es sencillo:

coffee> a = [''a'', ''b'', ''program''] [ ''a'', ''b'', ''program'' ] coffee> [_..., b] = a [ ''a'', ''b'', ''program'' ] coffee> b ''program''

¿Es6 permite algo similar?

> const [, b] = [1, 2, 3] ''use strict'' > b // it got the second element, not the last one! 2 > const [...butLast, last] = [1, 2, 3] SyntaxError: repl: Unexpected token (1:17) > 1 | const [...butLast, last] = [1, 2, 3] | ^ at Parser.pp.raise (C:/Users/user/AppData/Roaming/npm/node_modules/babel/node_modules/babel-core/node_modules/babylon/lib/parser/location.js:24:13)

Por supuesto que puedo hacerlo de la manera es5:

const a = b[b.length - 1]

Pero tal vez esto sea un poco propenso a errores de uno. ¿Puede el splat ser lo último en la desestructuración?


Creo que ES6 al menos podría ayudar con eso:

[...arr].pop()

Dado que su matriz (arr) no está indefinida y es un elemento iterable (sí, ¡incluso las cadenas funcionan!), Debería devolver el último elemento ... incluso para la matriz vacía y tampoco la altera. Sin embargo, crea una matriz intermedia ... pero eso no debería costar mucho.

Su ejemplo se vería así:

[...[''a'', ''b'', ''program'']].pop() -> ''program''


Esto debería funcionar:

const [lastone] = myArray.slice(-1);


No es necesariamente la forma más eficaz de hacer. Pero dependiendo del contexto, una forma bastante elegante sería:

const myArray = [''one'',''two'',''three'']; const theOneIWant = [...myArray].pop(); console.log(theOneIWant); // ''three'' console.log(myArray.length); //3


No es posible en ES6 / 2015. El estándar simplemente no lo prevé.

Como puede ver en la especificación , FormalParameterList puede ser:

  • un FunctionRestParameter
  • una lista FormalsList (una lista de parámetros)
  • una lista FormalsList , seguida de un FormalsList FunctionRestParameter

No se proporciona FunctionRestParameter seguido de parámetros.


Puede desestructurar la matriz invertida para acercarse a lo que desea.

const [a, ...rest] = [''a'', ''b'', ''program''].reverse(); document.body.innerHTML = "<pre>" + "a: " + JSON.stringify(a) + "/n/n" + "rest: " + JSON.stringify(rest.reverse()) + "</pre>";


const [last] = [1, 3, 4, 5].slice(-1) const [second_to_last] = [1, 3, 4, 5].slice(-2)


const arr = [''a'', ''b'', ''c'']; // => [ ''a'', ''b'', ''c'' ] const { [arr.length-1]: last} = arr; console.log(last); // => ''c''