获取数组的倒数第二项?

lau*_*kok 41 javascript arrays jquery

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

例如,

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

这将返回一个空值.但我想得到article-1

谢谢.

Pab*_*dez 72

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

在普通的旧JavaScript中你可以做到:

var pg_url = array_fragment[array_fragment.length - 2]
Run Code Online (Sandbox Code Playgroud)

更轻松,更快捷:)

  • @James:在"不返回任何内容"中失败,或者在Error中失败?当我测试它时,它只返回`undefined`. (5认同)
  • 如果array_fragment.length == 1则失败 (3认同)

JJ *_*wax 48

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

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

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

> path = 'a/b/c/d';
> path.split('/').reverse()[1];
'c'
Run Code Online (Sandbox Code Playgroud)

  • 只是一个建议,但这看起来更具可读性:倒数第二个:`path.split('/').slice(-2).reverse().pop()`倒数第三个:`path.split('/').slice (-3).reverse().pop()` 第四个倒数:`path.split('/').slice(-4).reverse().pop()` 等 (2认同)

t_d*_*m93 36

arr.at(-2);将执行精确操作 - 它返回数组中的最后第二项。


const arr = [1,2,3,4];
arr.at(-2); // Returns 3
Run Code Online (Sandbox Code Playgroud)

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

浏览器完全支持它。

文档:数组/at


151*_*291 12

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

var fragment_arr = fragment.split("/");
Run Code Online (Sandbox Code Playgroud)

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

var lastTwo = fragment_arr.slice(-2);
Run Code Online (Sandbox Code Playgroud)

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

var element = lastTwo[0];
alert(element);
Run Code Online (Sandbox Code Playgroud)

简短回答:您可以将下面的步骤2和3结合起来

var element = fragment_arr.slice(-2)[0];
alert(element);
Run Code Online (Sandbox Code Playgroud)


Pen*_*Liu 5

这可以被 lodash 覆盖_.nth

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