javascript - 在循环中调用时 splice 不会删除元素

标签 javascript

我正在编写一个代码,它接受一个输入字符串和一个标记数组,并删除从标记到找到它的末尾的所有内容。我有一个函数可以识别标记,然后找到它所在行的末尾。该函数返回一个数组,其中从 0 开始的每对元素对应于我想要拼接的部分。然而,只有我对 splice 的一些调用实际上删除了任何内容。

这是我的主要代码:

function solution(input, markers){
  var positions = identify(input, markers);
  var arr = input.split('');

  for(var i = 0; i<positions.length; i+=2){
    arr.splice(positions[i], positions[i+1] - positions[i]);
    console.log(positions[i+1]);
  }
  return arr.join('');
}

我已经测试过identify,它返回了我所期望的结果。这是我目前失败的测试:

Test.assertEquals(solution("apples, pears # and bananas\ngrapes\nbananas !apples", ["#", "!"]), "apples, pears\ngrapes\nbananas")

我调用identify()的结果是[14,27,43,50],我尝试直接与(43, 7)拼接,这是可行的,所以我不明白为什么它没有删除任何元素在循环中使用时。我总是得到这样的结果:

预期:苹果、梨 葡萄 香蕉

取而代之的是:苹果、梨 葡萄 香蕉!苹果

最佳答案

您需要向后遍历 positions 数组,因为当您拼接出 arr 的某些元素时,这些元素之后的所有内容的索引都会发生变化。

function solution(input, markers){
  var positions = identify(input, markers);
  var arr = input.split('');

  for(var i = positions.length-2; i >= 0; i-=2){
    arr.splice(positions[i], positions[i+1] - positions[i]);
    console.log(positions[i+1]);
  }
  return arr.join('');
}

关于javascript - 在循环中调用时 splice 不会删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871509/

相关文章:

javascript - 我如何使用外部 div 在另一个 Div onClick 上切换展开和收缩?

javascript - 如果 aria-label 发生变化,让屏幕阅读器重读

javascript - 喜欢 Facebook 墙贴 - Javascript

javascript - 如何检查一个文件中有多少个数组?

javascript - 检测屏幕分辨率然后进行比较

javascript - 如何从React根组件获取数据?

javascript - 在新的 Facebook JavaScript SDK 中显示弹出窗口

javascript - 刷新页面时标题外观不起作用

javascript - 如何为小部件的选项指定默认值?

javascript - Electron 类型错误: Cannot read property 'normalizePath' of undefined