Javascript String.slice()方法返回的奇怪结果
我的例子是将一个字符串分离为字符串数组,然后将每三个字符转换为一个字符串。(例如,“xxxyyy”->Javascript String.slice()方法返回的奇怪结果,javascript,string,slice,Javascript,String,Slice,我的例子是将一个字符串分离为字符串数组,然后将每三个字符转换为一个字符串。(例如,“xxxyyy”->['xxx','yyy']) const translate=函数(RNA){ var arrRna=Array.from(RNA); var-arr=[]; for(arrRna中的var键){ 如果((键%3)=0){ var temp=RNA切片(键,(键+3)); arr.push(温度); } } 返回arr; } console.log(翻译('xxxyyzzz'))问题在于,fo
['xxx','yyy']
)
const translate=函数(RNA){
var arrRna=Array.from(RNA);
var-arr=[];
for(arrRna中的var键){
如果((键%3)=0){
var temp=RNA切片(键,(键+3));
arr.push(温度);
}
}
返回arr;
}
console.log(翻译('xxxyyzzz'))
问题在于,for..in
在属性名称上循环,并且属性名称始终是字符串。例如,当键为3时:
var temp = RNA.slice( key, (key+3));
评估为
var temp = RNA.slice('3', '33');
因为当涉及字符串时,+
会连接。您可以先将其转换为编号:
const translate=函数(RNA){
var arrRna=Array.from(RNA);
var-arr=[];
for(arrRna中的var键){
键=数字(键);
如果((键%3)=0){
var temp=RNA切片(键,(键+3));
arr.push(温度);
}
}
返回arr;
}
console.log(翻译('xxxyyzzz'))代码>塔达!与其将字符串转换为数组并遍历每个字符,等待索引为3的倍数,不如简单地按3计数
函数翻译(rna){
设arr=[];
for(设i=0;i console.log(translate('xxxydyzd'))代码>嘿,所以我解决了问题。当您将3添加到键时,它会将结果关联为0、03、3、33、6、63作为键,将键+3作为您看到的结果
const translate=函数(RNA){
var arrRna=Array.from(RNA);
var-arr=[];
for(arrRna中的var键){
如果((键%3)=0){
console.log(键)
console.log(键+3)
var temp=RNA切片(键,(键+3));
arr.push(温度);
}
}
返回arr;
}
console.log(翻译('xxxyyzzz'))代码>除了向字符串添加数字(对象的键是什么)之外,您可以使用生成器对字符串进行任意切片
函数*translate(字符串、大小){
var i=0;
而(i console.log([…translate('xxxyyzzz',3)]代码>使用带有映射回调的Array.from()
方法来完成整个过程
const translate=(RNA)=>{
返回Array.from({length:Math.ceil(RNA.length/3)},(u,i)=>RNA.slice(i*3,i*3+3));
}
console.log(翻译('xxxyyzzz'))代码>独立于字符数(3)共享另一个解决方案
你不应该在数组上的
循环中使用,这通常是不可靠的,因为(不幸的是)向内置类型添加可枚举方法的常见做法(以及键是字符串而不是下面答案中指出的数字这一事实)。你就像上帝一样,regex解决方案很有趣
let spltStr = myStr =>
[...myStr.toLowerCase()].reduce((acc, char) => {
let last = acc[acc.length - 1];
!last || last[last.length - 1] !== char
? acc.push(char)
: (acc[acc.length - 1] += char);
return acc;
}, []);