JavaScript - получить все, кроме последнего элемента в массиве - PullRequest
37 голосов
/ 09 июля 2010

Это мой код:

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

Ответы [ 5 ]

45 голосов
/ 09 июля 2010

Я не совсем уверен, что вы пытаетесь сделать.Но вы можете использовать slice, чтобы нарезать массив:

loc_array = loc_array.slice(0, -1);
37 голосов
/ 09 июля 2010

Используйте 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 (другие современные браузеры).

18 голосов
/ 03 декабря 2015

При использовании lodash можно использовать _.initial(array):

_. Initial (array) : Получить все элементы массива, кроме последнего.

Пример:

_.initial([1, 2, 3]);
// → [1, 2]
1 голос
/ 09 июля 2010

В зависимости от того, собираетесь ли вы когда-либо повторно использовать массив, вы можете просто один раз использовать метод pop() для удаления последнего элемента.

0 голосов
/ 09 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...