Розглянемо які є способи перетворення тексту у масив в JavaScript.
String.split()
У JavaScript є стандартний метод для розбиття рядка на масив split(). В якому в якості параметра можна вказати роздільник.
Приклад розділення кожного символу рядка на елемент масиву:
var text="JavaScript";
var arr=text.split('');
alert(arr);
Вказуємо роздільник символ "a":
var text="JavaScript";
var arr=text.split('a');
alert(arr);
...
Розділяємо рядок на масив за допомогою оператора розширення ....
var text="JavaScript";
var arr=[...text];
alert(arr);
Object.assign()
За допомогою метода Object.assign() який буде копіювати значення рядка у масив.
var text='JavaScript';
var arr=Object.assign([],text);
alert(arr);
Array.from()
Метод Array.from() створює новий масив з масивоподібного об'єкта, що дозволить перетворити рядок у масив.
var text="JavaScript";
var arr=Array.from(text);
alert(arr);
slice()
Не стандартно викликаний метод slice() дозволяє перетворити рядок у масив.
Нестандартність полягає в тому що ми за допомогою метода call() викликаємо метод slice() з заданим this - рядок.
var text="JavaScript";
var arr=[].slice.call(text);
alert(arr);
Цикл
Рядок можна розбити на масив за допомогою циклу.
Щоб розбити текст на масив де кожен символ буде елементом масиву необхідно "пройтися" циклом по рядку і кожен символ додати до масиву за допомогою Array.push().
var text="JavaScript";
var arr=[];
for(var i=0;i<text.length;i++)
arr.push(text[i]);
alert(arr);
Якщо необхідно текст перетворити на масив використовуючи роздільник (як у методі String.split())тоді потрібно шукати роздільник у рядку за допомогою indexOf() і додавати необхідну частину тексту до масиву.
var text="JavaScript";
var arr=[];
var r='a', pos=0, p=0;
do{
p=text.indexOf(r,p);
if(p>-1){
arr.push(text.substring(pos,p));
pos=p=p+r.length;
}else{
if(pos>0)arr.push(text.substr(pos));
else arr.push(text);
}
}while(p>-1);
alert(arr);
Об'єднаємо два вище описаних цикла у повноціну функцію.
function StringToArray(text,r){
text=text.toString();
r=r||'';
var res=[];
if(text=='') return res;
if(r==''){
for(var i=0;i<text.length;i++)
res.push(text[i]);
return res;
}
var pos=0, p=0;
do{
p=text.indexOf(r,p);
if(p>-1){
res.push(text.substring(pos,p));
pos=p=p+r.length;
}else{
if(pos>0)res.push(text.substr(pos));
else res.push(text);
}
}while(p>-1);
return res;
}
var mas=StringToArray('JavaScript', 'a');
alert(mas);