我有以下代码。
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
}
});
}
为什么拼接不能删除该行中的多个字符?仅当特殊字符出现在字母之间时,才将其删除。如何更改代码以仅实现字母表中字母的位置?
答案 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++;