Вы в основном хотите решить две проблемы.Во-первых, вы хотите создать отдельный массив для каждого слова (определить границы слов).Затем вы хотите разбить каждое слово на составляющие буквы.
Выполнение этого без какой-либо "современной" магии JavaScript (отображение, уменьшение и т. Д.) Будет выглядеть примерно так:
var word = "abc def";
// Step 1.
var wordArray = word.split(" ");
console.log(wordArray); // ["abc", "def"]
// Step 2.
for (var i = 0; i < wordArray.length; i++)
{
wordArray[i] = wordArray[i].split("");
}
console.log(wordArray); // [["a", "b", "c"], ["d", "e", "f"]]
Этот второй шаг можно записать в несколько более компактной форме, осознав, что это так называемая проблема mapping .Вы хотите взять каждый элемент массива и преобразовать его из одной формы (строки) в другую (массив букв).Для этого в JavaScript предусмотрен метод map
:
var squares = [1, 2, 3].map(function(x) { return x * x; });
console.log(squares); // [1, 4, 9]
Таким образом, мы можем переписать шаг 2, используя этот метод следующим образом:
wordArray = wordArray.map(function(word) { return word.split(""); });
Наконец, мы можем упростить дальнейшее использованиефункция стрелки.Функции стрелок в основном сокращены для следующего:
x => x + 1;
// Is equivalent to:
(function(x) {
return x + 1;
}).bind(this);
Пока игнорируем бит .bind()
(это неважно для вашей проблемы), и мы можем записать шаг 2 как:
wordArray = wordArray.map(word => word.split(""));
Комбинируя эти два улучшения, мы получаем:
var word = "abc def";
// Step 1.
var wordArray = word.split(" ");
// Step 2.
wordArray = wordArray.map(word => word.split(""));
Мы можем уменьшить это немного больше, передав результат word.split(" ")
непосредственно шагу 2 без сохраненияэто в промежуточную переменную:
var word = "abc def";
// Step 1 and 2.
var wordArray = word.split(" ").map(word => word.split(""));
И вот оно у вас.«Современный» ответ, созданный из основ.