toString не "читается"

function createPhoneNumber(numbers){
    var one = one.toString(numbers[0]); 
    var two = two.toString(numbers[1]); 
    var three = three.toString(numbers[2]); 
    var four = four.toString(numbers[3]) ;
    var five = five.toString(numbers[4]); 
    var six = six.toString(numbers[5]) ;
    var seven = seven.toString(numbers[6]) ;
    var eight = eight.toString(numbers[7]) ;
    var nine = nine.toString(numbers[8]) ;
    var ten = ten.toString(numbers[9]);
    var f = "(" + one + two + three + ")";
    return f + '' + four + five + six + "-" + seven + eight + nine + ten;
  } 
  alert(createPhoneNumber(1,2,3,4,5,6,7,8,9,0))

Здесь просто надо вывести номер телефона.


Ответы (2 шт):

Автор решения: Igor

function createPhoneNumber() {
  var one   = "" + arguments[0];
  var two   = "" + arguments[1];
  var three = "" + arguments[2];
  var four  = "" + arguments[3];
  var five  = "" + arguments[4];
  var six   = "" + arguments[5];
  var seven = "" + arguments[6];
  var eight = "" + arguments[7];
  var nine  = "" + arguments[8];
  var ten   = "" + arguments[9];
  
  var f = "(" + one + two + three + ")";
  return f + '' + four + five + six + "-" + seven + eight + nine + ten;
}
console.log(createPhoneNumber(1, 2, 3, 4, 5, 6, 7, 8, 9, 0))

→ Ссылка
Автор решения: OPTIMUS PRIME

var one = one.toString(numbers[0]); — При запуске фукнции, сперва создаются все переменные, объявленные через var (получая значение undefined) независимо от их места в коде. Потом код выполняется сверху вниз, должно сработать присваивание = one.toString(numbers[0]) — в этот момент one уже существует (undefined), получается ошибка Cannot read property 'toString' of undefined

Что-то близкое вашей функции можно получить так:

console.log(createPhoneNumber(1, 2, 3, 4, 5, 6, 7, 8, 9, 0))

function createPhoneNumber(...numbers) {
  // Если без многоточия - надо через запятую в скобках указать 10 переменных.
  var one = numbers[0].toString();
  var two = numbers[1].toString();
  var three = numbers[2].toString();
  var four = numbers[3].toString();
  var five = numbers[4].toString();
  var six = numbers[5].toString();
  var seven = numbers[6].toString();
  var eight = numbers[7].toString();
  var nine = numbers[8].toString();
  var ten = numbers[9].toString();
  var f = "(" + one + two + three + ")";
  
  return f + '' + four + five + six + "-" + seven + eight + nine + ten;
}

Можно еще все аргументы завернуть в массив и приклеить элементы через join. Они и так превратятся в строку. А скобки и черточку вставить через Регулярные выражения:

console.log( createPhoneNumber(1,2,3,4,5,6,7,8,9,0) );

function createPhoneNumber(){
  return [...arguments].join("").replace(/(\d{3})/, "($1)").replace(/\)(\d{3})/, ")$1-");
}

А еще лучше изначально передавать в функцию массив чисел, а не 10 аргументов.

→ Ссылка