gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:25:59 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com