JavaScript

Почему split не работает и правильно ли написана функция? javascript. Помогите, пожалуйста

Метод сплит на четвертой строчке не работает. Помечается в консоли красной чертой с крестиком в красном кружке. Ошибка Uncaught TypeError: j.split is not a function
функция принимает массив из чисел. Каждый элемент переделывает в строку
если число состоит из одной цифры, она переделывается в массив, потом в первом блоке ответвления получается строка, где первый символ, это ноль, потом цифра, из за которой сработал этот бок кода
К примеру, была 2, стало "02"
Почему сплит выдает ошибку и правильно ли написана фукнция переделывания массива из чисел в массив из строк и модифицированных одиночных чисел

function fun(argument12) {
--------for (var i = 0; argument12.length; i++) {
------------var j = argument12[i]
------------var a = String(j.split(""))
------------if (a[1] == undefined) {
----------------var t = String(a[0])
----------------var t1 = "0"
----------------t1 = t1 + t
----------------argument12[i] = t1
------------} else {
----------------argument12[i] = j
------------}
--------}
--------return argument12
}
Потому, что j - НЕ строка и метода split не имеет. Чтобы получить строку надо либо j.toString(), либо j + ''.

Не надо переусложнять. Требуется всего лишь приписать '0' слева к строковому представлению числа, если число меньше 10. Это делается в одну строчку:

return argument12.map(val => val.toString().padStart(2, '0'));

А если нужна поддержка старых браузеров, то:

return argument12.map(function(val) { return (val < 10 ? '0' : '') + val; });
Максим Землянцев
Максим Землянцев
61 355
Лучший ответ
Сергей Клименко forEach ничего не возвращает, если так хочется что-то вернуть, тогда лучше map
Функция же и так получает массив... Можно всё организовать прямо в цикле.

function fun( argument12 ) {
  for( var i = 0; i < argument12.length; i++ ){
    if( argument12[i] < 10 ){
      argument12[i] = "0" + argument12[i];
    }
  }
  return argument12;
}

Или, если надо все числа превратить в строки...

function fun( argument12 ) {
  for( var i = 0; i < argument12.length; i++ ){
    argument12[i] = ( (argument12[i] < 10) ? "0" : "" ) + argument12[i];
    //Здесь сперва идет проверка.
    //Если число меньше 10 - будет добавляться 0, иначе - пустая строка.
  }
  return argument12;
}

А split не работает, потому что j там всё еще очередной элемент массива, а еще не строка. Должно было быть

String( j ).split("")

P.s. эти ----тут не нужны... и так прокатывает. Если сильно хочется красивый JS постить, можно использовать левый ALT + 255