2016-06-15 225 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

是否有你避免使用'splice'的原因? – 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簡化這個問題的有效解釋,我會刪除我的downvote。 – Paulpro

+0

我使用jQuery slice()方法完成了類似於此的操作。 這就是爲什麼我建議jQuery,請糾正我,如果我錯了。感謝 –

+0

[jQuery's slice](https://api.jquery.com/slice/)適用於jQuery集合,而不是數組。它不適用於OP數組,它是一個字符串數組。幸運的是普通的Javascript數組有[切片](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)和[splice](https://developer.mozilla.org/ en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)。 – Paulpro

0

罪魁禍首您的函數以下行

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

在這裏,我將被分配到,因爲這值undefined進行比較(===),而不是分配(=)。因此,我(未定義)>否將永遠是假的,所以沒有更多的循環執行。 簡單地用分配替換比較

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