JavaScript - получить все, кроме последнего элемента в массиве
Это мой код:
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, чтобы захватить все, кроме последнего элемента в массиве. Сейчас он сломан, а элемент перед ним получает второй-последний элемент.
Ответы
Ответ 1
Используйте 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, например <
и &
, пользователи могут вводить разметку. Если вы могли бы получить <script>
в URL-адресе (который вы не должны иметь, так как он недействителен, но какой-то браузер может позволить вам в любом случае), у вас будут проблемы с безопасностью межсайтового скриптинга.
Чтобы установить текст элемента вместо HTML, используйте document.createTextNode('string')
и добавьте его в элемент или код ветвления, чтобы использовать innerText
(IE) или textContent
(другие современные браузеры).
Ответ 2
Я не совсем уверен, что вы пытаетесь сделать. Но вы можете использовать slice
для среза массива:
loc_array = loc_array.slice(0, -1);
Ответ 3
При использовании lodash можно использовать _.initial(array)
:
_. initial (array): возвращает все, кроме последнего элемента массива.
Пример:
_.initial([1, 2, 3]);
// → [1, 2]
Ответ 4
В зависимости от того, будете ли вы когда-либо повторно использовать массив, вы можете просто использовать метод pop()
один раз, чтобы удалить последний элемент.
Ответ 5
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. Это хороший ресурс для этого.