javascript - String.slice() 方法返回的奇怪结果

标签 javascript string slice

我的例子是将一个字符串分成字符串数组,然后将每三个字符转换为一个字符串。 (例如“xxxyyy”-> ['xxx','yyy'])

const translate = function (RNA) {
    var arrRna = Array.from(RNA);
    var arr = [];
    for (var key in arrRna) {
        if ((key % 3) == 0) {
            var temp = RNA.slice( key,  (key+3));
            arr.push(temp);
        }

    }
    return arr;
}

console.log(translate('xxxyyyzzz'));

预期结果:['xxx','yyy','zzz']

但我想要的结果是:[ 'xxx', 'yyyzzz', 'zzz' ]

另外,我注意到 slice 方法在第一次迭代中按预期工作,但在那之后,奇怪的结果 --> 'yyyzzz'。为什么??

最佳答案

问题是 for..in 遍历属性名,而属性名总是字符串。因此,例如,当 key 为 3 时:

var temp = RNA.slice( key,  (key+3));

评估为

var temp = RNA.slice('3',  '33');

因为 + 在涉及字符串时连接。您可以先转换为 Number:

const translate = function(RNA) {
  var arrRna = Array.from(RNA);
  var arr = [];
  for (var key in arrRna) {
    key = Number(key);
    if ((key % 3) == 0) {
      var temp = RNA.slice(key, (key + 3));
      arr.push(temp);
    }

  }
  return arr;
}

console.log(translate('xxxyyyzzz'));

或者,您可以使用普通的 for 循环对数组进行分块,其逻辑可能更容易一目了然地理解:

const translate = function(RNA) {
  const output = [];
  for (let i = 0; i < RNA.length; i += 3) {
    output.push(RNA.slice(i, i + 3));
  }
  return output;
}

console.log(translate('xxxyyyzzz'));

另一种选择是使用全局正则表达式 .match:

const translate = RNA => RNA.match(/.{1,3}/g);
console.log(translate('xxxyyyzzz'));

关于javascript - String.slice() 方法返回的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53924902/

相关文章:

javascript - 如何能够将图像转换为 base64 并避免同源策略

javascript - ThreeJS 垃圾收集问题

javascript - 动态保存和刷新

go - 根据值匹配数组

python - 如何从 numpy 数组中提取任意行值?

string - 寻址返回的函数 slice 时出错

javascript - ionic : Why are my images not loading from my json file?

c++ - 当 malloc() 相同的结构时,如何在结构中使用 C++ 字符串?

Android:不同语言的 "String Array",输入 "Assets"还是 "strings.xml"?

Python:将正则表达式替换为字符串以用作正则表达式