JS:将元素插入数组

时间:2016-06-15 06:00:20

标签: javascript arrays splice

我有以下功能。期望在 no 位置将 item 插入到数组中。插入 item 时,将删除该数组的最后一个元素,即数组必须始终具有相同的长度。使用 split()从字符串会话变量 itemstr 中获取数组。数组的第一个元素永远不会改变,所以我总是从n===1开始调用这个函数。问题是该函数不会在splice()的意义上插入。它只是更改元素 #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();
        }
    }

4 个答案:

答案 0 :(得分:1)

在这一行中你有一个类型:

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

实际应该是:i = itemarr.length - 1而不是i === itemarr.length - 1

答案 1 :(得分: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();

        }

答案 2 :(得分:0)

你的功能的罪魁祸首是

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

这里我将被赋值为undefined,因为这是一个比较(===)而不是赋值(=)。因此,我(未定义)&gt;不会永远是假的,所以不再循环执行。 只需将替换与作业替换

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

答案 3 :(得分:-1)

正如我从问题中所理解的那样,您希望将变量插入到固定位置的数组中,并且该位置的先前内容需要移位,并且需要删除最后一个数组值。

只需使用arr.pop()删除最后一个元素,并使用for循环将一个位置向右移动。 在这里使用jQuery会更简单。