web-dev-qa-db-fra.com

obtenir l'avant-dernier élément d'un tableau?

Comment puis-je obtenir le dernier élément dans un tableau?

Par exemple,

var fragment = '/news/article-1/'
var array_fragment = fragment.split('/');
var pg_url = $(array_fragment).last()[0];

Cela retourne une valeur vide. Mais je veux obtenir article-1

Merci.

33
laukok

Tout ne doit pas être fait avec jQuery. 

En clair vieux javascript, vous pouvez faire:

var pg_url = array_fragment[array_fragment.length - 2]

Plus facile et plus rapide :)

61
Pablo Fernandez

On dirait que vous pouvez aussi utiliser la méthode slice de Javascript:

> path = 'a/b/c/d';
> path.split('/').slice(-2, -1)[0];
'c'

Vous pouvez également considérer "l'avant-dernier élément du tableau" comme "le deuxième élément du tableau inversé":

> path = 'a/b/c/d';
> path.split('/').reverse()[1];
'c'
42
JJ Geewax

Étape 1: Utilisez split () Method pour scinder les éléments en un tableau.

var fragment_arr = fragment.split("/");

Étape 2: Utilisez slice (-2) Method pour sélectionner les 2 derniers éléments d’un tableau, le nombre négatif à sélectionner à la fin d’un tableau.

var lastTwo = fragment_arr.slice(-2);

Étape 3: Le tableau lastTwo contient les deux derniers éléments de fragment_arr. Vous pouvez désormais accéder à ce dernier.

var element = lastTwo[0];
alert(element);

Réponse courte : vous pouvez combiner les étapes 2 et 3 comme ci-dessous

var element = fragment_arr.slice(-2)[0];
alert(element);
12
151291

Ceci peut être couvert par lodash _.nth :

var fragment = '/news/article-1/'
var array_fragment = _.split(fragment, '/');
var second_last = _.nth(array_fragment, -2);
console.log(second_last);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

2
Yi-Ting Liu

Cette question est ancienne mais reste pertinente. Slice avec la longueur-1 est le meilleur choix, mais comme alternative avec le soulignement/lodash:

_.initial () obtient tout sauf le dernier

_.last () obtient le dernier

Alors tu pourrais faire 

_.last(_.initial([1,2,3,4])) 

ou en chaîne:

_.chain([1,2,3,4])
 .initial()
 .last()
 .value();

ce qui vous rend 3.

Ou dans la question initiale:

var fragment = '/news/article-1/'
var array_fragment = fragment.split('/');
var pg_url = _.chain(array_fragment).initial().last().value();
1
Jason Turnage

Si vous devez souvent accéder aux tableaux à l’inverse, et pas seulement à l’avant-dernier index, vous pouvez utiliser une simple extension du prototype.

Lors de l'extension d'un élément aussi grand et utilisé que le prototype Array, veillez à ne pas affecter son utilisation. Pour ce faire, assurez-vous que la propriété n'est pas énumérable afin que for in ne s'étouffe nulle part ailleurs (certaines personnes et certaines bibliothèques utilisent for in pour itérer des tableaux).

Object.defineProperty(Array.prototype, 'rev', {
  enumerable: false,
  value: function(index){
    return this[this.length - 1 - index];
  }
});

document.write([1,2,3,4,5,6].rev(1));

Et maintenant, vous pouvez utiliser l'indexation à base zéro en sens inverse.

1
Travis J
var pg_url = array_fragment[array_fragment.length -2]

array_fragment n'est pas une variable jquery, c'est une vieille variable javascript, donc pas besoin de $ ()

1
dave
const myArray: Array<string> = ['first', 'second', 'third'];

Diviser myArray par deuxième dernier élément. 

const twoItemsFromEnd = myArray.slice(-2); //Outputs: ['second', 'third']

Ensuite

const secondLast = twoItemsFromEnd[0];

Ou:

const secondLast = (params.slice(-2))[0];
0
Uliana Pavelko

Ce qui suit fonctionne pour une chaîne avec nth parties 'url'.

var fragment = '/t/e/s/t/i/n/g/';
var fragment = '/t/';

Si le fragment est de longueur variable, vous avez besoin d'une solution qui fonctionne pour différentes tailles de fragment.

var fragment = '/news/article-1/';
var array_fragment = fragment.split('/');

Split sépare la chaîne de fragment où il trouve '/'. Split prend la valeur avant et après le caractère séparé. Dans ce cas, il n'y a rien avant la première barre ou après la dernière barre. Les valeurs vides sont ajoutées à array_fragment dans les première et dernière positions de tableau.

jQuery
var pg_url = $(array_fragment)[$(array_fragment).length - 2];

javascript
var pg_url = array_fragment[array_fragment.length - 2];

Comme vous pouvez le constater, jQuery n’est pas nécessaire pour cette solution.

Array_fragment.length - 2 compte la longueur du tableau_fragment et sélectionne le deuxième élément à partir de la fin. La dernière valeur est "" car Split ('/') a ajouté une valeur vide à la fin du tableau array_fragment.

Simplifié et tout mis en place:

var f = '/t/e/s/t/i/n/g/'.split('/');
f[f.length - 2]
0
mbunch