gpt4 book ai didi

javascript - JS 函数中的字符串操作

转载 作者:行者123 更新时间:2023-12-02 18:53:47 25 4
gpt4 key购买 nike

我有一个字符串说

((C1 AND C2) OR C3 AND C4) 

现在,如果输入是“2”,我应该删除 C2 和下一个运算符(OR),并重新排列编号...所以输出是

((C1 AND ) C2 AND C3).

**测试字符串输入和输出

----------STRING --------------------------- INPUT ---------------EXPECTED OUTPUT

1. (C1 AND C2 OR C3 AND C4) <<3(Input)>> (C1 AND C2 OR C3)

2. C1 OR C2 AND (C3 OR C4) AND C5 <<2(Input)>> C1 OR (C2 OR C3) AND C4

所以我只需要删除带有给定输入号的“C”和下一个运算符(如果有),保留所有括号并删除带有升序号的“C”。这必须在 JS 函数中完成

最佳答案

只要输入保持一致,那么这些内容可能会满足您的需求。我知道你说“保留所有括号”,但这会产生丑陋的输出,所以我选择更正括号。你可以轻松地取出那部分。

function handleInput(str, input){
var inArray = str.split(' ');
inArray.forEach(function(v,i,a){
if(v.indexOf("C"+input) > -1){
if(v.indexOf('(') > -1 || v.indexOf(')') > -1)
inArray = fixParen(inArray, input, v, i);
else if(i+2 < a.length){
inArray.splice(i,2);
inArray = fixNumbers(inArray);
}
else
inArray.splice(i-1,2);
console.log(inArray.join(' '));
}
});
}
function fixParen(inArray, input, elem, index){
var elemArray = elem.split('');
var parenNumber = 0;
if(elem.indexOf('(') > -1){
elemArray.forEach(function(v){
if(v == '('){
parenNumber++;
}
});
for (var i = index+2; parenNumber > 0; i+=2){
var tempElem = inArray[i].split('');
var n = tempElem.indexOf(')');
if(n > -1){
tempElem.splice(n,1);
inArray[i] = tempElem.join('');
parenNumber--;
}
}
inArray.splice(index,2);
return fixNumbers(inArray);
}
else{
elemArray.forEach(function(v){
if(v == ')'){
parenNumber++;
}
});
for (var i = index-2; parenNumber > 0; i-=2){
var tempElem = inArray[i].split('');
var n = tempElem.indexOf('(');
if(n > -1){
tempElem.splice(n,1);
inArray[i] = tempElem.join('');
parenNumber--;
}
}
inArray.splice(index,2);
return fixNumbers(inArray);
}
}
function fixNumbers(inArray){
var count = 1;
inArray.forEach(function(v,i,a){
if(v.indexOf('C') > -1){
var tempElem = v.split('');
var n = tempElem.indexOf('C');
tempElem.forEach(function(val,ind,arr){
if(parseInt(val,10))
tempElem.splice(ind,1);
});
tempElem.splice(n+1,0,count);
inArray[i] = tempElem.join('');
count ++;
}
});
return inArray;
}

这实际上是一个比看起来简单得多的问题。首先,您应该注意字符串的每个重要部分均由“”分隔。这让我们可以使用 .split(' ') 为我们提供一个包含所有有用部分的漂亮数组。接下来,括号只能位于 C 元素上,从而减少所需的逻辑量。然后,每个 ( 在某个时刻都有一个相应的 ) ,这使我们可以完全忽略对字符串长度的测试,因为我们可以假设存在一个带有匹配括号的元素。最后只有两种情况,它是最后一个 C 元素,所以我们删除前面的运算符,或者它不是最后一个,我们删除后面的运算符。撇开括号匹配不谈,这个逻辑非常短。

关于javascript - JS 函数中的字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15594963/

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