以下是我迄今为止的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()例子
为了获得一个可读且简洁的解决方案,可以使用Array.prototype.slice和destructuring的组合。
const linkElement = document.getElementById("BackButton");
const loc_array = document.location.href.split('/');
// assign the last three items of the array to separate variables
const [thirdLast, secondLast, last] = loc_array.slice(-3);
// use the second last item as the slug...
let parentSlug = secondLast;
if (last === 'index.html') {
// ...unless this is an index
parentSlug = thirdLast;
}
const newT = document.createTextNode(
unescape(
capWords(parentSlug)
)
);
linkElement.appendChild(newT);
但为了简单地获取数组中的最后一项,我更喜欢这种表示法:
const [lastItem] = loc_array.slice(-1);
2022年ECMA
使用ECMA 2022,您可以在()处获得一个新属性。要从数组或字符串中获取最后一个元素,可以在中使用负索引-1。[1,2,3].在(-1)处。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/at
如果您希望像arr.last这样更流畅地接收最后一项,则可以为数组对象定义自己的属性。
if(!Array.protocol.hasOwnProperty(“last”)){Object.defineProperty(Array.prototype,“last”{获取(){返回此。在(-1);}});}a=[1,2,3];console.log(a.last);
if (loc_array[loc_array.length - 1] === 'index.html') {
// do something
} else {
// something else
}
如果您的服务器为“index.html”和“index.html”提供相同的文件,您也可以使用:.toLowerCase()。
不过,如果可能的话,您可能会考虑在服务器端做这件事:它会更干净,适用于没有JS的人。
编辑-ES-2022
使用ES-2022 Array.at(),上面的内容可以这样写:
if (loc_array.at(-1) === 'index.html') {
// do something
} else {
// something else
}