JavaScript - 获取数组中除最后一项之外的所有内容

问题描述 投票:0回答:6

这是我的代码:

 function insert(){
  var loc_array = document.location.href.split('/');
  var linkElement = document.getElementById("waBackButton");
  var linkElementLink = document.getElementById("waBackButtonlnk");
  linkElement.innerHTML=loc_array[loc_array.length-2];
  linkElementLink.href = loc_array[loc_array.length];
 }

我希望

linkElementLink.href
抓取除数组中最后一项之外的所有内容。现在它坏了,它之前的项目获得了倒数第二个项目。

javascript dom
6个回答
125
投票

我不太确定你想做什么。但您可以使用

slice
来对数组进行切片:

let loc_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
loc_array = loc_array.slice(0, -1)
console.log(loc_array)


74
投票

优先使用

pathname
而不是
href
来仅检索链接的路径部分。否则,如果存在
?query
#fragment
后缀,或者路径为
/
(无父路径),您将得到意外结果。

linkElementLink.href= location.pathname.split('/').slice(0, -1).join('/');

(但是,你当然可以说:)

linkElementLink.href= '.';

不要这样做:

linkElement.innerHTML=loc_array[loc_array.length-2];

从任意字符串设置 HTML 是危险的。如果您从中获取此文本的 URL 包含 HTML 中的特殊字符,例如

<
&
,则用户可以注入标记。如果您可以在 URL 中获得
<script>
(您不应该这样做,因为它是无效的,但某些浏览器可能会让您这样做),那么您就会遇到跨站点脚本安全漏洞。

要设置元素的文本,而不是 HTML,请使用

document.createTextNode('string')
并将其附加到元素,或分支代码以使用
innerText
(IE) 或
textContent
(其他现代浏览器)。


29
投票

如果使用lodash,可以使用

_.initial(array)

_.initial(array):获取数组中除最后一个元素之外的所有元素。

示例:

_.initial([1, 2, 3]);
// → [1, 2]

2
投票

根据您是否要重用该数组,您可以简单地使用

pop()
方法一次来删除最后一个元素。


0
投票

linkElementLink.href = loc_array[loc_array.length];
在数组中添加一个新的空槽,因为数组从 0 到 array.length-1; 所以你返回一个空槽。

linkElement.innerHTML=loc_array[loc_array.length-2];
如果您使用括号,您只能获得一个索引的内容。 我不确定这是否是你想要的?下一节将介绍如何获取多个索引。

要获得 .href 所需的内容,您需要对数组进行切片。

linkElementLink.href = loc_array.slice(0,loc_array.length-1);
或使用负数从末尾开始计数
linkElementLink.href = loc_array.slice(0,-1);
这是更快的方法。

另请注意,当直接从数组获取内容时,您将得到与

.toString()
方法相同的内容,即 item1、item2、item3。 如果您不需要逗号,则需要使用
.join()
。 就像
array.join('-')
会返回 item1-item2-item3。 这是所有数组方法的列表http://www.w3schools.com/jsref/jsref_obj_array.asp。 这是执行此操作的良好资源。


0
投票

.slice(你想要的数量)

如果您只想要数组中的前 4 个元素,则使用 array.slice(3)

从数组末尾开始计算负数

© www.soinside.com 2019 - 2024. All rights reserved.