我正在编写一个代码,它接受一个输入字符串和一组标记,并删除从标记到找到它的末尾的所有内容。我有一个功能,它识别一个标记,然后找到它所在的行的结尾。此函数返回一个数组,其中每对元素(从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('');
}
我已经测试了识别并且它正在返回我期望的内容。这是我目前失败的测试:
Test.assertEquals(solution("apples, pears # and bananas\ngrapes\nbananas !apples", ["#", "!"]), "apples, pears\ngrapes\nbananas")
我对identify()的调用的结果是[14,27,43,50]并且我已经尝试直接拼接(43,7),这是有效的,所以我无法弄清楚为什么它没有删除任何元素在循环中使用。我总是得到这个结果:
预计:苹果,梨 葡萄 香蕉
取而代之的是:苹果,梨 葡萄 香蕉!苹果答案 0 :(得分:3)
你需要在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('');
}