如何获取数组中的最后一项?
例如,
var fragment = '/news/article-1/'
var array_fragment = fragment.split('/');
var pg_url = $(array_fragment).last()[0];
返回空值。但我想得到article-1
感谢。
答案 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]。您只需要提及切片的开始和结束即可。