【问题标题】:splice method not accepting variable to remove item from array javascript拼接方法不接受变量以从数组javascript中删除项目
【发布时间】:2014-01-22 04:52:23
【问题描述】:

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

【问题讨论】:

  • splice 的第一个参数不是一个值,它是一个起始索引。你应该写一些像arr.splice(i, 1);
  • 啊,我明白我的错误了,谢谢
  • 检查我的答案并修复你的代码,考虑这两点。

标签: javascript arrays for-loop splice


【解决方案1】:

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

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

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

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)也不会改变。

【讨论】:

  • 这是我无法删除变量并像这样for(var i = arr.length; i &gt;= 0; i--) 编写循环的原因吗?
  • 不,这只是为了确保如果您从 0 开始,for 循环将迭代所有索引,但是当您按照我的方式进行操作时,它就不再重要了。我想我最好改一下答案。
猜你喜欢
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 2021-05-22
相关资源
最近更新 更多