以下是我迄今为止的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”,如果是这样,则获取倒数第三个项目。
编辑:
最近,我又提出了一个解决方案,我现在认为这是最适合我的需求的:
function w(anArray) {
return {
last() {
return anArray [anArray.length - 1];
};
};
}
根据上述定义,我现在可以说:
let last = w ([1,2,3]).last();
console.log(last) ; // -> 3
名称“w”代表“包装器”。您可以看到如何轻松添加更多除了“last()”之外的方法。
我说“最符合我的需要”,因为这允许我可以很容易地添加其他这样的“助手方法”任何JavaScript内置类型。发生了什么记住Lisp的car()和cdr()例子
这个问题已经存在了很长一段时间,所以我很惊讶没有人提到在pop()之后重新打开最后一个元素。
arr.pop()的效率与arr[arr.length-1]完全相同,两者的速度都与arr.push()相同。
因此,您可以避免:
---已编辑[在推送前检查顶部是否未定义]---
let thePop = arr.pop()
thePop && arr.push(thePop)
---结束编辑---
可以降低到这个速度(相同速度[编辑:但不安全!]):
arr.push(thePop = arr.pop()) //Unsafe if arr empty
这是arr[arr.length-1]的两倍慢,但您不必到处填充索引。这在任何一天都是值得的。
在我尝试过的解决方案中,以arr[arr.length-1]的执行时间单位(ETU)的倍数表示:
[方法]。。。。。。。。。。。。。。[ETU 5元素]。。。[ETU 100万元]
arr[arr.length - 1] ------> 1 -----> 1
let myPop = arr.pop()
arr.push(myPop) ------> 2 -----> 2
arr.slice(-1).pop() ------> 36 -----> 924
arr.slice(-1)[0] ------> 36 -----> 924
[...arr].pop() ------> 120 -----> ~21,000,000 :)
最后三个选项,特别是[…arr].pop(),随着数组大小的增加,会变得非常糟糕。在没有我的机器内存限制的机器上,[…arr].pop()可能会保持120:1的比率。然而,没有人喜欢资源猪。
以下是如何在不影响原始阵列的情况下获得它
a = [1,2,5,6,1,874,98,"abc"];
a.length; //returns 8 elements
如果使用pop(),它将修改数组
a.pop(); // will return "abc" AND REMOVES IT from the array
a.length; // returns 7
但您可以使用它,这样它对原始阵列没有影响:
a.slice(-1).pop(); // will return "abc" won't do modify the array
// because slice creates a new array object
a.length; // returns 8; no modification and you've got you last element
如果想要一次性获得最后一个元素,可以使用Array#splice():
lastElement = document.location.href.split('/').splice(-1,1);
这里,不需要将拆分的元素存储在数组中,然后获取最后一个元素。如果获得最后一个元素是唯一的目标,那么应该使用这个。
注意:这将通过删除最后一个元素来更改原始数组。将splice(-1,1)看作弹出最后一个元素的pop()函数。