Есть какой-то элегантный способ разбить значение на буквы, за тем перейти к следующему значению? У меня что-то одни костыли да ошибки получаются.
var key = 0;
var array = [
[
'один',
'два',
'три'
],
[
'first',
'second',
'third'
]
];
array[key]
Пример без разбивания на буквы:
for(var value = 0; value < array[key].length; value++) {
console.log(array[key][value]);
}
Результат:
один
два
три
Желаемый результат:
о
д
и
н
д
в
а
т
р
и
var key = 0;
var array = [
[
'значение',
'значение',
'значение'
],
[
'значение',
'значение',
'значение',
'значение',
'значение'
]
];
for(let i = 0; i < array.length; i++) {
for(let j = 0; j < array[i].length; j++) {
for(let k = 0; k < array[i][j].length; k++) {
document.write(array[i][j][k]);
}
}
}
Элементы массива можно перебрать с помощью метода forEach. Он вызовет функцию callback для каждого элемента массива:
arr.forEach(function callback(currentValue, index, array) {
//your iterator
}[, thisArg]);
Этот метод применяется именно к массивам. Чтобы пройти по символам из строки, можно сначала воспользоваться методом split. Он разобьёт строку на фрагменты и вернёт массив из этих фрагментов:
var arr = str.split([separator][, limit]);
Получится, например, так:
var array = [
[
'один',
'два',
'три'
],
[
'первый',
'второй',
'третий'
],
[
'first',
'second',
'third'
]
];
array.forEach( function(word) {
word[0].split('').forEach( function(letter) {
console.log( letter );
});
});
Но массивы с числовыми индексами быстрее всего перебираются циклом for (var i=0; i<arr.length; i++), потому что браузер их "особым образом оптимизирует". Поэтому быстрее всего отработает код, предложенный @MedvedevDev.
Если в вопросе было не о скорости, то можно вот так вот:
function f(arr) {
return arr.reduce((s, a) => {
return s.concat(typeof a === 'string' ? a.length === 1 ? a : f(Array.from(a)) : f(a));
}, []);
}
такой вызов
console.log(f([
[
'значение',
'значение',
'значение'
],
[
'значение',
'значение',
'значение',
'значение',
'значение'
]
]));
вернет
[ 'з',
'н',
'а',
'ч',
'е',
'н',
'и',
'е',
'з',
'н',
'а',
'ч',
'е',
...
Eщё один вариант:
array.forEach( function(word) {
for( let k in word ) {
word[k].split('').forEach( function(letter) {
console.log( letter );
});
}
});
for( var k in array ) {
for (var i in array[k] ) {
for ( var j in array[k][i]) {
console.log( array[k][i][j] )
}
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости