我正在编写一个代码,它接受一个输入字符串和一个标记数组,并删除从标记到找到它的末尾的所有内容。我有一个函数可以识别标记,然后找到它所在行的末尾。该函数返回一个数组,其中从 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/