2016-06-15 6 views
-1

私は以下の機能を持っています。配列の位置に配列し、に挿入することが期待されます。 の項目が挿入されると、配列の最後の要素が削除されます。つまり、の配列の長さは常にでなければなりません。配列は、文字列セッション変数からitemstrsplit()を使用して取得されます。配列の最初の要素は決して変更されないため、私はいつもn===1で始まるこの関数を呼び出します。問題は、関数がsplice()という意味で挿入されないということです。JS:配列に要素を挿入する

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

それは実際にする必要があります:i = itemarr.length - 1なくi === itemarr.length - 1

+2

'スプライス 'を避ける理由はありますか? – Paulpro

+0

項目が挿入されると、配列の最後の要素が削除されます。配列の長さは固定されていますか? – brk

+0

'= 'の代わりに' === ' – 1983

答えて

1

の要素の値を変更します私が理解しているのは、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(); 

     } 
+0

ありがとう!!それはそれです –

0

は何を得ていないそれは単にあなたが型を持つ#NOこのラインで

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(); 
     } 
    } 
-1

場合にはこれを試すことができ、かつその位置の以前の内容がシフトし、最後の配列値の必要性を必要とします除去する。

最後の要素を削除してforループを使用して1つの位置を右にシフトするにはarr.pop()を使用してください。 jQueryを使用する方がよりシンプルになります。あなたの関数のための

+0

jQueryでこれを簡単にする方法の有効な説明を1つ与えることができるなら、私は自分のdownvoteを削除します。 – Paulpro

+0

私はjQuery slice()メソッドを使ってこれに似たことをしました。 それが私がjQueryを提案した理由です。私が間違っていれば私を修正してください。ありがとう –

+0

[jQueryのスライス](https://api.jquery.com/slice/)は、配列ではなくjQueryコレクションで動作します。文字列の配列であるOPの配列には使用できません。幸いにも、通常のJavascript配列には[slice](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)と[splice](https://developer.mozilla.org/)があります。 ja/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)を参照してください。 – Paulpro

0

犯人はここでライン

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

に従っている、これは比較(===)及びません代入(=)であるので、私は未定義値に割り当てられます。したがって、i(定義されていない)> noは常に偽になるので、ループはそれ以上実行されません。 単に代入と比較を置き換える

for (i = itemarr.length - 1; i > no; i--) 
関連する問題