Подтвердить что ты не робот

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, чтобы захватить все, кроме последнего элемента в массиве. Сейчас он сломан, а элемент перед ним получает второй-последний элемент.

4b9b3361

Ответ 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. Это хороший ресурс для этого.