Javascript 是否获取数组的倒数第二项?
如何获取数组中的最后一秒项 比如说,Javascript 是否获取数组的倒数第二项?,javascript,jquery,arrays,Javascript,Jquery,Arrays,如何获取数组中的最后一秒项 比如说, var fragment = '/news/article-1/' var array_fragment = fragment.split('/'); var pg_url = $(array_fragment).last()[0]; 这将返回一个空值。但是我想得到article-1 谢谢。并非所有事情都必须使用jQuery完成 在普通的旧javascript中,您可以执行以下操作: var pg_url = array_fragment[array_fr
var fragment = '/news/article-1/'
var array_fragment = fragment.split('/');
var pg_url = $(array_fragment).last()[0];
这将返回一个空值。但是我想得到article-1
谢谢。并非所有事情都必须使用jQuery完成 在普通的旧javascript中,您可以执行以下操作:
var pg_url = array_fragment[array_fragment.length - 2]
更简单更快:)
array_fragment不是jquery变量,它是一个普通的老javascript变量,因此不需要$()看起来您也可以使用javascript的
slice
方法:
var path = 'a/b/c/d';
path.split('/').slice(-2, -1)[0]; // c
您还可以将“数组中倒数第二个元素”视为“数组中倒数第二个元素”:
如果经常需要反向访问数组,而不仅仅是倒数第二个索引,那么可以使用对原型的简单扩展 当扩展与阵列原型一样大的对象时,请确保不会影响其使用的任何其他部分。这是通过确保属性不可枚举来实现的,以便
for in
不会阻塞其他任何地方(有些人和库使用for in
来迭代数组)
Object.defineProperty(Array.prototype,'rev'{
可枚举:false,
值:函数(索引){
返回此[this.length-1-索引];
}
});
文件编写([1,2,3,4,5,6].rev(1))代码>步骤1:使用split()方法将元素拆分为数组
var fragment_arr = fragment.split("/");
var lastTwo = fragment_arr.slice(-2);
步骤2:使用切片(-2)方法从数组中选择最后2个元素,即从数组末尾选择的负数
var fragment_arr = fragment.split("/");
var lastTwo = fragment_arr.slice(-2);
步骤3:lastwo
数组包含fragment\u arr
的最后两个元素,现在您可以这样访问
var element = lastTwo[0];
alert(element);
简短回答:您可以将第2步和第3步结合起来,如下所示
var element = fragment_arr.slice(-2)[0];
alert(element);
以下内容适用于包含第n个“url”部分的字符串
var fragment = '/t/e/s/t/i/n/g/';
var fragment = '/t/';
如果片段长度可变,则需要一种适用于各种片段大小的解决方案
var fragment = '/news/article-1/';
var array_fragment = fragment.split('/');
Split分离找到“/”的片段字符串。Split获取分割字符前后的值。在本例中,在第一个斜杠之前或最后一个斜杠之后没有任何内容。空值将添加到第一个和最后一个数组位置的数组_片段中
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计算数组_片段的长度,并从末尾选择第二项。最后一个值为“”,因为拆分(“/”)将一个空值添加到数组\u片段数组的末尾
简化并综合起来:
var f = '/t/e/s/t/i/n/g/'.split('/');
f[f.length - 2]
然后
或:
这个问题由来已久,但仍然相关。长度为-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();
这可由lodash覆盖:
var fragment='/news/article-1/'
var数组_fragment=u.split(fragment,“/”);
var second\u last=\uu.nth(数组\u片段,-2);
console.log(倒数第二个)代码>
答案是[3]。您只需提及slice的开始和结束。arr.at(-2)代码>将执行以下操作-它返回数组中的最后一秒项
var fragment_arr = fragment.split("/");
var lastTwo = fragment_arr.slice(-2);
at()
方法接受一个正整数或负整数,并返回该索引处的项。负整数从数组中的最后一项开始倒数
文件:
注:实验特性!如果array_fragment.length==1@James:失败为“不返回任何内容”,或失败为错误?当我测试它时,它只返回undefined
@James它实际上并没有失败。。。当您访问数组中未编入索引的元素时,默认行为是返回未定义的(例如[1,2,3][10]===[1,2,3][1]
)此方法的问题是您无法将其链接起来:'a/b/c/d'。拆分('/')。切片(-2,-1)[0]===='c'
,如果您的答案只是“尝试一下”,它就不是答案。这是一个评论。若要写出有用的答案,请添加说明。这并不提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。-@张丹妮-我想,我更新了你的期望,我学会了如何给出答案。谢谢你在这里的回答已经涵盖了你的答案。。。它实际上更简单、更详细,因为它使用slice的第二个参数为数组只包含倒数第二个元素,而不声明其他变量(例如[1,2,3]。slice(-2,-1)[0]==2
),这只是一个建议,但看起来更具可读性:倒数第二:path.split('/').slice(-2).reverse().pop()
third last:path.split('/').slice(-3).reverse().pop()
third last:path.split('/').slice(-4).reverse().pop()
_.chain([1,2,3,4])
.initial()
.last()
.value();
var fragment = '/news/article-1/'
var array_fragment = fragment.split('/');
var pg_url = _.chain(array_fragment).initial().last().value();
var a = [1,2,3,4];
var b = a.slice(-2,-1);
console.log(b);
const arr = [1,2,3,4];
arr.at(-2); // Returns 3