É meio estranho que a classe JavaScript Array não ofereça um último método para recuperar o último elemento de uma matriz. Eu sei que a solução é simples (Ar [Ar.length-1]), mas, ainda assim, isso é usado com muita frequência.
Algum motivo sério para isso ainda não estar incorporado?
javascript
Nikhil Garg
fonte
fonte
item= array.pop();
.array[array.length-1]
é muito mais rápido que os outros.(Ar[Ar.length-1])
obtém um desempenho 20x melhor para mim.Respostas:
Porque o Javascript muda muito lentamente. E isso ocorre porque as pessoas atualizam os navegadores lentamente.
Muitas bibliotecas Javascript implementam suas próprias
last()
funções. Use um!fonte
last()
função. A questão era sobre a natureza do desenvolvimento da própria linguagem principal do Javascript.Você pode fazer algo assim:
Mostrar snippet de código
A quantidade de métodos auxiliares que podem ser adicionados a um idioma é infinita. Suponho que eles simplesmente não consideraram adicionar este.
fonte
É fácil definir um você mesmo. Esse é o poder do JavaScript.
No entanto, isso pode causar problemas com o código de terceiros que (incorretamente) usa
for..in
loops para iterar sobre matrizes.No entanto, se você não estiver vinculado a problemas de suporte ao navegador , o uso da nova sintaxe ES5 para definir propriedades pode resolver esse problema, tornando a função não enumerável, da seguinte forma:
fonte
for..in
problema. Claro, ainda não estamos lá com uma ampla implementação do ES5, mas é bom saber agora, já que os navegadores estão alcançando rapidamente, incluindo o IE9.this.length - 1
avalia como-1
, que, por ser um número negativo, é tratado como uma propriedade da matriz, não como um índice de elemento.i = [].concat(loves).pop(); //corn
ícone gato adora pipoca
fonte
Outra opção, especialmente se você já estiver usando o UnderscoreJS, seria:
fonte
fonte
null
ouundefined
?this[l-1]
forneceriaundefined
normalmente o acesso a propriedades inexistentes. Pessoalmente, prefiro que JS jogue uma exceção em vez de retornarundefined
, mas JS prefere varrer os erros para debaixo do tapete.Vim aqui procurando uma resposta para esta pergunta eu mesmo. A resposta da fatia é provavelmente a melhor, mas fui em frente e criei uma "última" função apenas para praticar a extensão de protótipos, então pensei em ir em frente e compartilhá-la. Ele tem o benefício adicional sobre alguns outros de permitir que você conte opcionalmente de trás para frente através da matriz e retire, digamos, o segundo para o último ou o terceiro para o último item. Se você não especificar uma contagem, o padrão será 1 e o último item será retirado.
fonte
last(4)
oulast(9)
perde o significado do nome da função, ou seja;last
Aqui está outra maneira mais simples de dividir os últimos elementos
lastObj
é agora["barfoo"]
.O Python faz isso da mesma maneira e, quando tentei usar o JS, funcionou. Suponho que a manipulação de strings nas linguagens de script funcione da mesma maneira.
Da mesma forma, se você deseja os dois últimos objetos em uma matriz,
vai te dar
["foobar", "barfoo"]
e assim por diante.fonte
lastObj
conterá["barfoo"]
. De qualquer forma, por que eu faria emArray.prototype.slice.call(tags
vez de apenastags.slice
?pop()
O método exibirá o último valor. Mas o problema é que você perderá o último valor na matrizfonte
Sim, ou apenas:
se você deseja o valor, e não uma nova lista.
fonte