Есть какой-то элегантный способ разбить значение на буквы, за тем перейти к следующему значению? У меня что-то одни костыли да ошибки получаются.
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] )
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При клике по некоторому элементу управления на экране появляется div c текстом подсказокУ дива есть кнопка "закрыть"
Интересует возможность реализации выделения области изображения по нескольким точкам, которые пользователь мышью будет ставитьАналог...
how to hide stackLabel for spline in this example Как скрыть вывод суммы для сплайна?
Каким образом можно сбрасывать таймер? при нажатие закрыть уведомление (Close или Message)