splice方法不接受变量从数组javascript中删除项目

时间:2014-01-04 14:01:46

标签: javascript arrays for-loop splice

我有一个对象,其字符串值附加到我希望使用函数删除的同一属性(如果该值存在)。为了实现这一点,我将字符串值放入一个数组中,迭代它们并希望使用splice()删除该值。问题是splice()似乎无法识别数组计数器。即使计数器较高,它也总是删除数组中的第一项。我检查了代码,循环工作正常。

我没有在网上看到过什么表明splice无法与索引中的变量一起使用。如何让splice使用计数器删除相对值?

var obj = {

className: 'open menu next thing'
}

function removeClass(elem, cls) {

var arr = elem.className.split(' ');

for(var i = 0; i < arr.length; i++) {
    if(arr[i] == cls) {
        alert(arr[i]);
        var splCout = arr.splice(arr[i], 1);
        alert(splCout);
    }
}
var str = arr.join(' ');
alert(str);
}

removeClass(obj, 'next');

1 个答案:

答案 0 :(得分:0)

您有2个不同的问题需要解决:

1-您正在修改for循环中的数组对象,在更改第一个splice数组并且其余循环项的arr.length完全不同之后,以防止它创建像len这样的变量,并将其设置为数组的长度一次。

但是如果你反过来改变循环,你需要一次:

for(var i = arr.length; i >= 0; i--) {
    if(arr[i] == cls) {
        alert(arr[i - 1]);
        var splCout = arr.splice(arr[i - 1], 1);
        alert(splCout);
    }
}

2-下一个更重要的问题是数组的索引,当你删除索引时,其他索引会改变(i ...... n)并且代码将无法正常工作,但是当你看看当你以这种方式迭代数组时,即使你删除索引,其他索引回到零(i .... 0)也不会改变。