以下是我迄今为止的JavaScript代码:

var linkElement = document.getElementById("BackButton");
var loc_array = document.location.href.split('/');
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2]))); 
linkElement.appendChild(newT);

目前,它从URL中获取数组中倒数第二项。但是,我想检查数组中的最后一个项目是否为“index.html”,如果是这样,则获取倒数第三个项目。


当前回答

根据ES2022,您可以使用Array.at()方法,该方法获取一个整数值并返回该索引处的项。允许正整数和负整数。负整数从数组中的最后一项开始倒数。

演示:

const href='www.abc.com/main/index.html';constloc_array=href.split('/');//要访问数组中的元素,我们可以使用array.at()console.log(loc_array.at(-1));//这将返回最后一个索引处的项目。

其他回答

另一个仅限ES6的选项是使用Array.find(item,index)=>{…}),如下所示:

const arr = [1, 2, 3];
const last = arr.find((item, index) => index === arr.length - 1);

没有什么实际价值,张贴出来表明索引也可用于您的过滤逻辑。

箭头函数通过不重复数组的名称,使执行速度最快的方法更加简洁。

var lastItem = (a => a[a.length - 1])(loc_array);

如果你来这里找的话,这里还有更多的Javascript艺术

根据另一个使用reduceRight()但更短的答案:

[3, 2, 1, 5].reduceRight(a => a);

它依赖于这样一个事实,即如果您没有提供初始值,最后一个元素将被选为初始元素(请查看此处的文档)。由于回调只返回初始值,最后一个元素将是最后返回的元素。

请注意,这应该被认为是Javascript的艺术,而不是我推荐的方式,主要是因为它在O(n)时间运行,但也因为它会损害可读性。

现在是严肃的答案

我认为最好的方法(考虑到您希望它比array[array.length-1]更简洁)是:

const last = a => a[a.length - 1];

然后只需使用函数:

last([3, 2, 1, 5])

如果您正在处理上面使用的[3,2,1,5]这样的匿名数组,则该函数实际上非常有用,否则您必须将其实例化两次,这将是低效且丑陋的:

[3, 2, 1, 5][[3, 2, 1, 5].length - 1]

Ugh.

例如,在这种情况下,您有一个匿名数组,您必须定义一个变量,但您可以使用last()代替:

last("1.2.3".split("."));

jQuery巧妙地解决了这个问题:

> $([1,2,3]).get(-1)
3
> $([]).get(-1)
undefined

只是在这里放了另一个选项。

loc_array.splice(-1)[0] === 'index.html'

我发现上述方法更简洁、更简短。请随意尝试一下。

注意:它将修改原始数组,如果您不想修改它,可以使用slice()

loc_array.slice(-1)[0] === 'index.html'

感谢@VinayPai指出这一点。