Задать вопрос
@sultan19
Frontend

Почему не получается перезаписать символ в двумерном массиве?

function titleCase(str) {
  str = str.toLowerCase();
  let mass = str.split(' ');
  
  for(let i in mass)
  {
    mass[i][0] = mass[i][0].toUpperCase();  
    
  }
  
  return mass;
}

titleCase("I'm a little tea pot");


Почему не получается перезаписать символ в массиве?
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Простой 1 комментарий
Решение пользователя Сергей Соколов К ответам на вопрос (2)
sergiks
@sergiks Куратор тега JavaScript
♬♬
Строку разбили по пробелам на слова. И затем у каждого слова пытаетесь заменить первый символ на его заглавную версию. Но вот такой доступ к строке как к массиву букв работает только «для чтения»:
mass[i][0]

Нельзя просто взять и .. заменить символ в строке.

См. Доступ к символам:
отрывок документации
Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массивоподобного объекта, в котором символы имеют соответствующие числовые индексы:
return 'кот'[1]; // вернёт "о"
При доступе к символам посредством нотации с квадратными скобками, попытка удалить символ, или присвоить значение числовому свойству закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми. Смотрите документацию по методу Object.defineProperty() для дополнительной информации.


Вариант решения – сделать из каждого слова настоящий массив букв:
const titleCase = str => str
    .toLowerCase()
    .split(' ')
    .map(word => {
      const chararr = word.split('');
      chararr[0] = chararr[0].toUpperCase();
      return chararr.join('');
    })
    .join(' ');

  titleCase("I'm a little pea"); // I'm A Little Pea
  titleCase("I love the sky and the trees"); // I Love The Sky And The Trees
Ответ написан