Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按字母顺序取消连续字符的资格。Sol[ASCII格式]_Javascript_Arrays_String_Data Manipulation - Fatal编程技术网

Javascript 按字母顺序取消连续字符的资格。Sol[ASCII格式]

Javascript 按字母顺序取消连续字符的资格。Sol[ASCII格式],javascript,arrays,string,data-manipulation,Javascript,Arrays,String,Data Manipulation,我的朋友给了我这个问题。问题要求从给定的字符串输入中删除所有按字母顺序排列的连续字符。 所以我是用Javascript做的,如果我精确地执行它,我需要专家的帮助 我认为使用Array.prototype.reduce将是最好的方法,我们还有其他可能的方法吗 /** * @author Abhishek Mittal <abhishekmittaloffice@gmail.com> * @description function can deal with both any typ

我的朋友给了我这个问题。问题要求从给定的字符串输入中删除所有按字母顺序排列的连续字符。 所以我是用Javascript做的,如果我精确地执行它,我需要专家的帮助

我认为使用Array.prototype.reduce将是最好的方法,我们还有其他可能的方法吗

/**
 * @author Abhishek Mittal <abhishekmittaloffice@gmail.com>
 * @description function can deal with both any types followed in a consecutive manner in ASCII Chart.
 * @param {string} str 
 */
function improvise(str) {
    // Backup for original input.
    const bck = str || '';
    const bckArr = bck.split('').map( e => e.charCodeAt(0)); // converting the alphabets into its ASCII for simplicity and reducing the mayhem.

    let result = bckArr.reduce( (acc, n) => {
            // Setting up flag
            let flag1 = n - acc.rand[acc.rand.length - 1];
            let flag2 = n - acc.temp;

            if(flag1 === 1 || flag2 === 1) {
                (flag2 !== NaN && flag2 !== 1) ? acc.rand.pop() : null; // update the latest value with according to the case.
                acc.temp = n
            }else{
                acc.rand.push(n); // updating the random to latest state.
                acc.temp = null;
            }

        return acc;

    }, {rand: [], temp: null} /* setting up accumulative situation of the desired result */) 

    result = result.rand.map(e => String.fromCharCode(e)).join('')
    return result ? result : '' ;
}

function init() {
    const str = "ab145c";
    const final = improvise(str);
    console.log(final)
}
init();
/**
*@作者阿披实·米塔尔
*@description函数可以处理ASCII图表中连续出现的任何类型。
*@param{string}str
*/
功能即兴表演(str){
//备份原始输入。
常数bck=str | |'';
const bckArr=bck.split(“”).map(e=>e.charCodeAt(0));//将字母表转换为ASCII以简化操作并减少混乱。
让结果=bckArr.reduce((acc,n)=>{
//竖旗
设flag1=n-acc.rand[acc.rand.length-1];
让flag2=n-附件温度;
如果(flag1==1 | | flag2==1){
(flag2!==NaN&&flag2!==1)?acc.rand.pop():null;//根据情况使用更新最新值。
附件温度=n
}否则{
acc.rand.push(n);//将随机更新为最新状态。
acc.temp=null;
}
返回acc;
},{rand:[],temp:null}/*设置所需结果的累积情况*/)
result=result.rand.map(e=>String.fromCharCode(e)).join(“”)
返回结果?结果:“”;
}
函数init(){
const str=“ab145c”;
const final=即兴创作(str);
console.log(最终版)
}
init();
嗯,结果是正确的。 输入:ab145c
输出:1c

不幸的是,使用任何远程合理的正则表达式都无法解决这个问题

我认为使用
.filter
,并检查下一个字符或上一个字符是否连续会更加清晰:

const code=char=>char
? char.charCodeAt(0)
: -2; // 加法或减法后,将不会===到任何其他代码
功能即兴表演(str){
返回[…str]
.filter((字符,i)=>{
const thisCode=代码(字符);
返回(
这个代码!==代码(str[i-1])+1
&&此代码!==代码(str[i+1])-1
);
})
.加入(“”);
}

console.log(即兴创作('ab145c'))好吧,这是一个很好的代码,但它没有给出问题的确切解决方案,请参见:

INPUT: hishakmitalaaaaabbbbbbcccccclmnojqyz
我得到

Output: shakmitalaaaabbbbcccccjq
你可以看到“ab”和“bc”保持不变,我们需要增加循环的数量来检查这些,这也会增加复杂性。 但是,我的解决方案并没有给出我想要的答案,例如,对于上面我应该得到的字符串

IshakMitalaaccjq

但我的解决方案给出了

Shakmitalcccjq


希望你能理解这个问题。我们需要改变遍历整个字符串的方式。

我们有没有办法用正则表达式解决这个问题?这是一个很好的代码,但它并没有给出问题的确切解决方案,请参阅:您的问题没有指定您需要不断替换字符,直到没有连续的字符为止,但如果您这样做,这只是一个简单的调整,请参见编辑-只需不断替换即可。是的,确实如此。我试过了,在我的例子中,我试图降低复杂性,但无论如何,我想我们现在可以用你的解决方案了。