2016-06-15 9 views
-1

У меня есть следующая функция. Ожидается, что вставить пункт в массив в позиции нет. Когда вставлен элемент, последний элемент массива отбрасывается, т. Е. Массив всегда должен иметь одинаковую длину. Массив берется из строковой переменной сеанса itemstr с использованием split(). Самый первый элемент массива никогда не будет изменен, поэтому я всегда вызываю эту функцию, начиная с n===1. Проблема в том, что функция не вставляет в значение splice(). Он просто изменяет значение элемента #noJS: вставка элемента в массив

function insert_into_array(no, item) 
    { 
     var itemarr = sessionStorage.itemstr.split(','); 

     if ((no < itemarr.length) && (no > 0)) { 
      var i; 
      for (i === itemarr.length - 1; i > no; i--) { 
       itemarr[i] = itemarr[i - 1]; 
      } 
      itemarr[no] = item; 
      sessionStorage.itemstr = itemarr.toString(); 
     } 
    } 
+2

Есть ли причина, по которой вы избегаете использования «сращивания»? – Paulpro

+0

Когда элемент вставлен, последний элемент массива отбрасывается. Массив имеет фиксированную длину? – brk

+0

'===' вместо '=' – 1983

ответ

1

В этой строке есть тип:

for (i === itemarr.length - 1; i > no; i--) { 

Это должно быть на самом деле: i = itemarr.length - 1 и не i === itemarr.length - 1

+0

Спасибо! Вот так –

0

Не получать то, что вы точно хочу. Я понимаю, что вам нужно вставить элемент в позицию, определяемую no, и удалить последний элемент. Вы можете попробовать это в случае ..

function insert_into_array(no, item) 
     { 
      var itemarr = sessionStorage.itemstr.split(','); 

      if ((no < itemarr.length) && (no > 0)) { 
       itemarr .splice(no, 0, item); //Insert element at position defined by #no 
       itemarr .pop(); //removes last element 
       } 
       sessionStorage.itemstr = itemarr.toString(); 

     } 
-1

Как я понял из вопроса, вы хотите, чтобы вставить переменный массив в фиксированном положении, а предыдущее содержимое в этой позиции необходимо сдвинутые и потребности значения последнего массива для удаления.

просто используйте arr.pop(), чтобы удалить последний элемент и использовать цикл for для переключения одной позиции вправо. Использование jQuery будет более простым здесь.

+0

Я удалю свой нижний предел, если вы можете дать одно правильное объяснение того, как вы можете упростить это с помощью jQuery. – Paulpro

+0

Я сделал что-то подобное этому, используя метод jQuery slice(). Вот почему я предложил jQuery, пожалуйста, поправьте меня, если я ошибаюсь. спасибо –

+0

[jQuery's slice] (https://api.jquery.com/slice/) работает с коллекциями jQuery, а не с массивами. Он не может использоваться для массива OP, который представляет собой массив строк. К счастью, обычные массивы Javascript имеют [slice] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) и [сращивание] (https://developer.mozilla.org/ ru/docs/Web/JavaScript/Reference/Global_Objects/Array/splice). – Paulpro

0

Виновник для функции следующей строки

for (i === itemarr.length - 1; i > no; i--) 

здесь я буду присвоен значению Не определен, так как это сравнение (===), а не присваивание (=). Таким образом, i (undefined)> no всегда будет ложным, поэтому больше не выполняется цикл. Просто замените сравнение с назначением

for (i = itemarr.length - 1; i > no; i--) 

 Смежные вопросы

  • Нет связанных вопросов^_^