我有一个对象,其字符串值附加到我希望使用函数删除的同一属性(如果该值存在)。为了实现这一点,我将字符串值放入一个数组中,迭代它们并希望使用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');
答案 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)也不会改变。