はじめに
JavaScriptで文字列を任意の文字数で分割し、配列を作成する方法です。
結論からいうと正規表現での取得が一番スッキリ書けました。
他にもいくつか試したの方法も記載しておきます。
例ではUGGUGUUAUUAAUGGUUU
の文字列を三文字毎に分割して["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]
の配列を作成しています。
正規表現
const rna = "UGGUGUUAUUAAUGGUUU";
let cdn1 = rna.match(/.{3}/g);
console.log(cdn1)
// ["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]
substr
const rna = "UGGUGUUAUUAAUGGUUU";
let cdn2 = [];
for (let i = 0; i < rna.length / 3; i++) {
cdn2.push(rna.substr(i * 3, 3));
}
console.log(cdn2)
// ["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]
substring
const rna = "UGGUGUUAUUAAUGGUUU";
let cdn3 = [];
for (let i = 0; i < rna.length; i += 3) {
cdn3.push(rna.substring(i, i + 3));
}
console.log(cdn3);
// ["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]
slice
const rna = "UGGUGUUAUUAAUGGUUU";
let cdn4 = [];
for (let i = 0; i < rna.length; i+=3) {
cdn4.push(rna.slice(i, i+3));
}
console.log(cdn4);
// ["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]
reduce
@hayashi-ay さんより教えて頂いたものです。
const rna = [..."UGGUGUUAUUAAUGGUUU"];
let cdn5 = rna.reduce( (acc, c, i ) => i % 3 ? acc : [...acc, rna.slice( i, i+3 ).join('') ], [] );
console.log(cdn5);