用字母位置替换字母,为什么拼接时不能删除多个字符

时间:2018-11-29 20:24:57

标签: javascript ascii

我有以下代码。

   public DatabaseUtils(AppDatabase db,  Context context) {
        db.testDao().getAllLiveList().observe(
                context, new Observer<List<TestEntity>>() {
                    @Override
                    public void onChanged(@Nullable List<TestEntity> testEntities) {
                       // do work

                    }
                });

    }

为什么拼接不能删除该行中的多个字符?仅当特殊字符出现在字母之间时,才将其删除。如何更改代码以仅实现字母表中字母的位置?

2 个答案:

答案 0 :(得分:1)

在循环中使用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--) 

那么您将不会更改尚未访问的元素的索引

答案 1 :(得分:0)

 

您正在遍历数组

for(let el in array)

,您仍然可以通过

从同一数组中删除元素。

array.splice(el,1);

您不能执行此操作,因为如果删除一个元素,则数组会缩短一个元素,但这不会反映在迭代中。

相反,通常按数字元素索引进行迭代(在循环条件下仍在检查数组的当前长度),然后增加索引或删除元素:

if(array[i] < 1 || array[o] > 26)
    array.splice(i,1)
else
    i++;