2016-06-15 182 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--)