首页 > 解决方案 > 用字母位置替换字母,为什么拼接不去掉多个字符

问题描述

我有以下代码。

var list = input => {
      let array = input.split('').map(ch => ch.toLowerCase().charCodeAt(0) - 96);

      for(let el in array) {
        if(array[el] < 1 || array[el] > 26)
          array.splice(el,1);
      }
      return array.toString().replace(/,/g, ' ');
    }

    console.log(list("The sun!!!set sets at twelve o' clock."));
    // output
    //20 8 5 19 21 14 -63 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 -64 3 12 15 3 11

为什么 splice 不删除行中的多个字符?只有出现在字母之间的特殊字符才会被删除。如何更改代码以仅实现字母表中字母的位置?

标签: javascriptascii

解决方案


在循环中使用 splice() 不是一个好主意。您正在更改循环内容的长度。

改为使用filter()以排除不需要的值。您也可以使用join()空格分隔符。

var list = input => {
  return input.split('')
    .map(ch => ch.toLowerCase().charCodeAt(0) - 96)
    .filter(n => n > 0 && n < 27)
    .join(' ');
}

console.log(list("The sun!!!set sets at twelve o' clock."));

如果您确实想要 splice() ,最安全的是通过数组向后工作

for(let i = array.length-1; i >= 0; i--) 

然后你不会改变你还没有访问过的元素的索引


推荐阅读