Voici mon code JavaScript jusqu'à présent:
var linkElement = document.getElementById("BackButton");
var loc_array = document.location.href.split('/');
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2])));
linkElement.appendChild(newT);
Actuellement, il prend l'avant-dernier élément du tableau à partir de l'URL. Cependant, je veux vérifier que le dernier élément du tableau soit"index.html"
et si c'est le cas, saisir le troisième au dernier élément à la place.
javascript
arrays
balexandre
la source
la source
Je ne sais pas s'il y a un inconvénient, mais cela semble assez concis:
ou
Les deux reviendront
undefined
si le tableau est vide.la source
const [lastItem] = arr.slice(-1)
.pop()
supprime le dernier élément qui modifie le tableau d'origine. Ce n'est pas la même chose que de simplement récupérer cette valeur.Utilisez Array.pop :
Important : cela renvoie le dernier élément et le supprime du tableau
la source
Une version plus courte de ce que @chaiguy a publié:
Lecture des rendements de l'indice -1
undefined
déjà.ÉDITER:
De nos jours, la préférence semble être d'utiliser des modules et d'éviter de toucher au prototype ou d'utiliser un espace de noms global.
la source
var lastItem = [3,2,1,5].last();
. La valeur delastItem
est5
.Do NOT modify objects you Do NOT own
. C'est dangereux pour de nombreuses raisons, telles que 1. D'autres développeurs travaillant dans votre équipe pourraient être confus car cette méthode n'est pas standard 2. avec toute mise à jour dans les bibliothèques ou même en utilisant une version ECMAScript inférieure ou supérieure, elle pourrait facilement être PERDUE!Array.prototype
, mais vous devriez utiliserObject.assign(Array.prototype, 'last', { value: function () { … } });
. Sinon, la propriété sera énumérable.Deux options sont:
ou
Le premier est plus rapide, mais le second est plus joli
http://jsperf.com/slice-vs-length-1-arr
la source
Voici comment l'obtenir sans effet sur l'ARRAY d'origine
Si vous utilisez pop (), cela modifiera votre tableau
Mais vous pouvez utiliser ceci afin qu'il n'ait aucun effet sur le tableau d'origine:
la source
pop()
alors: fais-learr.slice(-1)[0]
La voie ES6 la plus "propre" (IMO) serait:
Cela évite de muter
foo
, comme cela.pop()
aurait été le cas, si nous n'avions pas utilisé l'opérateur d'étalement.Cela dit, j'aime aussi la
foo.slice(-1)[0]
solution.la source
.slice(-1)[0]
mais plus lent. Peut aussi bien être utilisé.slice
Je préfère utiliser des
array.pop()
index.de cette façon, vous obtenez toujours l'élément précédent à index.html (à condition que votre tableau ait index.html isolé comme un élément). Remarque: vous perdrez cependant les derniers éléments du tableau.
la source
Je pense que si vous voulez seulement récupérer l'élément sans le supprimer, il est plus simple d'utiliser ceci:
Remarque: Si le tableau est vide (par exemple
[]
), cela reviendraundefined
.au fait ... je n'ai pas vérifié les performances, mais je pense que c'est plus simple et propre à écrire
la source
arr.slice(-1)[0] === arr[arr.length - 1]
), et b) il est lent car il copiearr
dans un nouveau tableau (voir stackoverflow.com/a/51763533/2733244 pour la mesure des performances).const [lastItem] = array.slice(-1);
Array.prototype.slice avec -1 peut être utilisé pour créer un nouveau tableau contenant uniquement le dernier élément du tableau d'origine, vous pouvez ensuite utiliser déstructuration pour créer une variable en utilisant le premier élément de ce nouveau tableau.
la source
L'obtention du dernier élément d'un tableau peut être obtenue en utilisant la tranche méthode de avec des valeurs négatives.
Vous pouvez en savoir plus ici en bas.
L'utilisation de pop () changera votre tableau, ce qui n'est pas toujours une bonne idée.
la source
arr.slice(-1)[0]
, comme cette réponse .array[array.length - 1]
jsperf.com/get-last-item-from-array/13Vous pouvez utiliser ce modèle ...
Bien qu'il se lise plutôt bien, gardez à l'esprit qu'il crée un nouveau tableau, il est donc moins efficace que d'autres solutions, mais ce ne sera presque jamais le goulot d'étranglement des performances de votre application.
la source
Cette question existe depuis longtemps, donc je suis surpris que personne n'ait mentionné simplement remettre le dernier élément après a
pop()
.arr.pop()
est exactement aussi efficace quearr[arr.length-1]
, et les deux ont la même vitesse quearr.push()
.Par conséquent, vous pouvez vous en sortir avec:
--- ÉDITÉ [vérifier que ce
thePop
n'est pasundefined
avant de pousser] ------ FIN DE LA MODIFICATION ---
Ce qui peut être réduit à cela (même vitesse [EDIT: mais dangereux!]):
C'est deux fois plus lent que cela
arr[arr.length-1]
, mais vous n'avez pas besoin de farfouiller avec un index. Cela vaut de l'or n'importe quel jour.Parmi les solutions que j'ai essayées, et en multiples de l'Execution Time Unit (ETU) de
arr[arr.length-1]
:[Méthode] .............. [ETUs 5 elems] ... [ETU 1 million elems]
Les trois dernières options, EN PARTICULIER
[...arr].pop()
, deviennent TRÈS bien pires à mesure que la taille du tableau augmente. Sur une machine sans les limites de mémoire de ma machine,[...arr].pop()
maintient probablement quelque chose comme son rapport 120: 1. Pourtant, personne n'aime un porc de ressources.la source
[]
sera transformée en[undefined]
. Vous devez protéger la poussée vers l'arrière avec uneundefined
vérification explicite , quelque chose commemyPop !== undefined && arr.push(myPop)
Si l'on veut obtenir le dernier élément d'un coup, il peut utiliser
Array#splice()
:Ici, il n'est pas nécessaire de stocker les éléments divisés dans un tableau, puis d'accéder au dernier élément. Si obtenir le dernier élément est le seul objectif, celui-ci doit être utilisé.
Remarque: cela modifie le tableau d'origine en supprimant son dernier élément. Considérez
splice(-1,1)
comme unepop()
fonction qui fait apparaître le dernier élément.la source
["hi"]
vs"hi"
.Pour ceux qui n'ont pas peur de surcharger le prototype Array (et avec le masquage d'énumération, vous ne devriez pas l'être):
la source
jQuery résout parfaitement:
la source
J'utilise généralement des traits de soulignement , avec cela vous pouvez simplement faire
Pour moi, c'est plus sémantique que
loc_array.slice(-1)[0]
la source
Voici plus d'art Javascript si vous êtes venu le chercher
Dans l'esprit d'une autre réponse utilisée
reduceRight()
, mais plus courte:Il repose sur le fait que, si vous ne fournissez pas de valeur initiale, le tout dernier élément est sélectionné comme élément initial (consultez la documentation ici ). Puisque le rappel continue de renvoyer la valeur initiale, le dernier élément sera celui renvoyé à la fin.
Attention, cela devrait être considéré comme de l' art Javascript et ce n'est en aucun cas la façon dont je recommanderais de le faire, principalement parce qu'il fonctionne en temps O (n), mais aussi parce que cela nuit à la lisibilité.
Et maintenant pour la réponse sérieuse
La meilleure façon que je vois (étant donné que vous le voulez plus concis que
array[array.length - 1]
) est la suivante:Ensuite, utilisez simplement la fonction:
La fonction est en fait utile dans le cas où vous avez affaire à un tableau anonyme comme
[3, 2, 1, 5]
utilisé ci-dessus, sinon vous devrez l'instancier deux fois, ce qui serait inefficace et laid:Pouah.
Par exemple, voici une situation où vous avez un tableau anonyme et vous devez définir une variable, mais vous pouvez utiliser à la
last()
place:la source
Je mets juste une autre option ici.
J'ai trouvé l'approche ci-dessus plus propre et plus courte. S'il vous plaît, n'hésitez pas à essayer celui-ci.
Remarque: Il modifiera le tableau d'origine, si vous ne voulez pas le modifier, vous pouvez utiliser
slice()
Merci @VinayPai de l' avoir signalé.
la source
Plusieurs façons de trouver la dernière valeur d'un tableau en javascript
la source
console.log(arr.reverse()[0])
- félicitations, vous venez de modifier le tableau d'origine.Il s'agit des meilleures options du point de vue des performances (~ 1000 fois plus rapide que arr.slice (-1)).
la source
Personnellement, je voterais en réponse par kuporific / kritzikratzi. La méthode array [array.length-1] devient très moche si vous travaillez avec des tableaux imbriqués.
la source
Dans l' étape 1 de la proposition ECMAScript, il est suggéré d'ajouter une propriété de tableau qui retournera le dernier élément: proposition-tableau-dernier .
Syntaxe:
Vous pouvez utiliser le polyfill .
Auteur de la proposition: Keith Cirkel ( chai autor)
la source
Pour éviter de supprimer le dernier élément du tableau d'origine, vous pouvez utiliser
Principalement pris en charge par tous les navigateurs (ES6)
la source
Vous pouvez ajouter une
last()
fonction auArray
prototype.la source
Quoi que vous fassiez ne pas simplement utiliser
reverse()
!!!Quelques réponses mentionnent
reverse
mais ne mentionnent pas le fait quereverse
le tableau d'origine est modifié et ne renvoie pas (comme dans d'autres langages ou frameworks) une copie.Cela peut être le pire type de code à déboguer!
la source
[...animals].reverse()
[1,3,4,5,"last"].slice().reverse()[0]
La déstructuration d'objets ES6 est une autre solution.
Vous extrayez la propriété length d'Array à l'aide de la déstructuration d'objets. Vous créez une autre clé dynamique en utilisant la clé déjà extraite par [longueur-1] et l'affectez à la dernière , le tout sur une seule ligne.
la source
Vous pouvez ajouter un nouvel getter de propriété au prototype de
Array
afin qu'il soit accessible via toutes les instances deArray
.Les accesseurs vous permettent d'accéder à la valeur de retour d'une fonction comme s'il s'agissait de la valeur d'une propriété. La valeur de retour de la fonction est bien sûr la dernière valeur du tableau (
this[this.length - 1]
).Enfin, vous l'
last
encapsulez dans une condition qui vérifie si la propriété est toujoursundefined
(non définie par un autre script qui pourrait s'y fier).Ne fonctionne pas dans IE ≤ 8.
la source
Array.prototype.last
est toujoursundefined
? L'if ne fonctionne pas sous Chrome 36ÉDITÉ:
Récemment, j'ai trouvé une autre solution que je pense maintenant être la meilleure pour mes besoins:
Avec la définition ci-dessus en vigueur, je peux maintenant dire:
Le nom "w" signifie "wrapper". Vous pouvez voir comment vous pouvez facilement ajouter plus de méthodes en plus de 'last ()' à ce wrapper.
Je dis «le mieux pour mes besoins», car cela me permet d'ajouter facilement d'autres «méthodes d'assistance» à n'importe quel type intégré JavaScript. Ce qui me vient à l'esprit, ce sont les voitures () et cdr () de Lisp par exemple.
la source
w
fonction, faites-la renvoyer le dernier élément.w([1,2,3]).length
n'est pas défini.w([1,2,3])[1]
n'est pas défini. Cela ne me semble pas comme un wrapper. Et il y a une erreur de syntaxe. Vous avez un extra ';'. Voir stackoverflow.com/a/49725374/458321 pour savoir comment écrire un wrapper de classe (classe SutString) et utiliser la réflexion pour remplir ce wrapper. Cependant, à mon humble avis, les emballages sont exagérés. Mieux vaut utiliser l'encapsulation, comme vous l'avez presque fait.return { arr: anArray, last() { return anArray[anArray.length - 1]; } };
. De plus, w est bien trop générique. L'appel est ArrayW ou quelque chose.Je pense que le moyen le plus simple et le plus inefficace est:
la source