Почему-то не срабатывает метод concat()

Надо чтобы строка повторилась слитно 3 раза. При этом repeat не пользоваться. Решил через добавление в массив циклом for и потом в строку join('').

Обнаружил, что ошибка в concat. А отчего он не хочет здесь работать?

function repeatStringNumTimes(str, num) {
  let me = ''
  let i = 0
  while (i < num) {
    me.concat(str)
    //me += str //если вставить эту строку вместо concat, let me изменится
    i++
  }
  return me;
}
let a = repeatStringNumTimes("abc", 3);
console.log(a);


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

Автор решения: Daniil Loban

Что касается ошибки в коде,то в документации говориться:

Метод concat() объединяет текст из двух или более строк и возвращает новую строку.

Это значит что строка не мутирует (не изменяется). Вообще, в JS строки никогда не мутируют, только массивы и то не всегда например в методе splice происходит мутация.

В любом учебном задании преследуется цель чтобы учащийся усвоил какую-то тему, поэтому очень важно в вопросе цитировать дословно все условия задачи, это поможет дать наиболее подходящий ответ. Т.е. нужно понимать какая тема в данном случае изучается Методы массивов или Методы строк, а может вообще Циклы и условные конструкции - во всех этих случаях ответы будут разными.

Если нужна реализация без repeat то вот она, тут используются методы массивов (но можно было бы обойтись циклом):

function repeatStringNumTimes(str, num) {
  return Array(num).fill(str).join('');
}

let a = repeatStringNumTimes("abc", 3);
console.log(a);

Что касается варианта с concat (методов строк) я бы использовал его так, хотя тут можно было обойтись простым join:

function repeatStringNumTimes(str, num) {
  return str.concat(...Array(num -1).fill(str))   
}
console.log(repeatStringNumTimes("abc", 3))

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

concat() не изменяет строку, а создает новую с измененным текстом.

Правильный код:

function repeatStringNumTimes(str, num) {
  let me = ''
  let i = 0
  while (i < num) {
    me = me.concat(str)
    i++
  }
  return me;
}
let a = repeatStringNumTimes("abc", 3);
console.log(a);
→ Ссылка