获取数组的倒数第二项?

时间:2011-06-27 21:13:04

标签: javascript jquery arrays

如何获取数组中的最后一项?

例如,

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

返回空值。但我想得到article-1

感谢。

11 个答案:

答案 0 :(得分:69)

并非所有事情都必须使用jQuery完成。

在普通的旧javascript中你可以这样做:

var pg_url = array_fragment[array_fragment.length - 2]

更轻松,更快捷:)

答案 1 :(得分:46)

看起来您也可以使用Javascript的slice方法:

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

您还可以将“数组中倒数第二个元素”视为“数组反转的第二个元素”:

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

答案 2 :(得分:12)

步骤1:使用 split()方法将元素拆分为数组。

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

步骤2:使用切片(-2)方法从数组中选择最后2个元素,从数组末尾选择负数。

var lastTwo = fragment_arr.slice(-2);

第3步:lastTwo数组包含fragment_arr的最后两个元素,现在您可以像这样访问

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

简短回答:您可以将步骤2和3结合起来,如下所示

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

答案 3 :(得分:2)

var pg_url = array_fragment[array_fragment.length -2]

array_fragment不是一个jquery变量,它是一个普通的旧javascript变量,所以不需要$()

答案 4 :(得分:2)

这可以用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>

答案 5 :(得分:1)

如果反向访问数组是经常需要的,而不仅仅是倒数第二个索引,可以使用原型的简单扩展。

当扩展大小的东西并用作Array原型时,请确保您不会影响其使用的任何其他部分。这是通过确保该属性不可枚举来完成的,这样for in就不会在其他地方阻塞(某些人和库使用for in来迭代数组)。

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));

现在你可以反向使用基于零的索引。

答案 6 :(得分:1)

这个问题很老但仍然相关。长度为1的切片是最好的选择,但作为替代品使用下划线/ lodash:

_.initial()获取除最后一个

以外的所有内容

_.last()获取最后一个

所以你可以做到

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

或链式:

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

给你回3。

或者在最初的问题中:

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

答案 7 :(得分:1)

arr.at(-2); 会做到这一点 - 它返回数组中的最后一个第二项。


const arr = [1,2,3,4];
arr.at(-2); // Returns 3

at() 方法采用正整数或负整数并返回该索引处的项目。负整数从数组中的最后一项开始计数。

文档:Array/at

注意:实验性功能!支持将在 Chrome v90

答案 8 :(得分:0)

以下适用于包含第n个&#39; url&#39;的字符串。部分。

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

如果片段长度可变,则需要一个适用于各种片段大小的解决方案。

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

拆分会将找到的片段字符串与&#39; /&#39; s分开。 Split获取拆分字符前后的值。在这种情况下,在第一个斜杠之前或最后一个斜杠之后没有任何内容。空值将添加到第一个和最后一个数组位置的array_fragment中。

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

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

如您所见,此解决方案不需要jQuery。

Array_fragment.length - 2 正在计算array_fragment的长度,并从末尾选择第二个项目。最后一个值是&#34;&#34;由于Split(&#39; /&#39;)在array_fragment数组的末尾添加一个空值。

简化并全部放在一起:

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

答案 9 :(得分:0)

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

按最后一项拆分myArray。

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

然后

const secondLast = twoItemsFromEnd[0];

或者:

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

答案 10 :(得分:0)

var a = [1,2,3,4];
var b = a.slice(-2,-1);
console.log(b);

答案是[3]。您只需要提及切片的开始和结束即可。