new Array ложный массив

Задача из codewars "Mexican Wave". Получаем строку(слово), нужно вернуть массив слов, где начиная с первого слова и первой буквы один знак должен быть верхнем регистре и так до последней. Количество слов, соответственно, равно количеству символов в строке. Задача простая, с ходу написал return в одну строку.

return new Array(str.length).fill(str.split("")).map((el,ind,ar) => {el[ind] = el[ind].toUpperCase(); return el.join("")})

Но результат не тот:

[
    "Rock",
    "ROck",
    "ROCk",
    "ROCK"
]

Перевел это решение в цикл, но и тут тоже самое. Добавил для сравнения обычный массив, результат положительный. Объясните в чем разница между массивами с и z

function cycle(b) {

  for (let i = 0; i < b.length; i += 1) {

    b[i][i] = b[i][i].toUpperCase()

    b[i] = b[i].join("")

  }

  return b
}

function wave(str) {

  let c =  new Array(str.length).fill(str.split(""))

  let z = [["r","o","c","k"],["r","o","c","k"],["r","o","c","k"],["r","o","c","k"]]
  
  return [cycle(z),cycle(c)]
}

console.log(wave("rock"))


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