javascript - 用字母位置替换字母,为什么拼接不去掉多个字符
问题描述
我有以下代码。
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 不删除行中的多个字符?只有出现在字母之间的特殊字符才会被删除。如何更改代码以仅实现字母表中字母的位置?
解决方案
在循环中使用 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--)
然后你不会改变你还没有访问过的元素的索引
推荐阅读
- python - 在相同的布局中使用 serialize() 打印 rdflib.Graph
- oracle11g - 无法删除表 Oracle
- assembly - MPLABX 5.40 MPASM 汇编 PIC
- linux - 在 Docker 中不断重启容器
- google-sheets - 如何每 x 行重复一个表 - 谷歌表
- ios - 带有 Woocommerce 的 FlexSlider:防止水平滑块上的垂直滑动触摸
- node.js - SyntaxError:在 Docker 容器上部署 React 应用程序时出现意外标识符
- php - 传递给方法后的PHP Laravel数组空值
- spring - 如何使用 Spring Boot 通过 OAuth2 协议登录用户?
- python - 最后除以组的第一行