использование метода map для изменения содержимого javascript - PullRequest
0 голосов
/ 31 марта 2020

https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-algorithm-scripting/title-case-a-sentence

Привет,

Я практикую алгоритм basi c от Freecodecamp.com.

Инструкция ниже.

Возвращает предоставленную строку с первой буквой каждого слова с заглавной буквы. Убедитесь, что остальное слово в нижнем регистре.

Для целей этого упражнения вы также должны использовать заглавные буквы, такие как "the" и "of".

And это мой код.

    const titleCase = str => {
      let result = str.split(' ');
      result = result.map(t => {
        t = t.toLowerCase();
        t[0] = t[0].toUpperCase();
        return t;
      });
      return result.join(' ');
    };
    
    console.log(titleCase("I'm a little tea pot"));

Результат i'm a little tea pot

Это то, о чем я думал.

  1. Извлечь целую строку на куски пробел.
  2. Сделать его строчным.
  3. Сделать только первую букву заглавной.
  4. вернуть результат.

Однако проблема Строка: 5 не влияет на результат. Первая буква не меняется. Я что-то упустил, верно? Кажется, я неправильно понимаю некоторые понятия о методе карты. Не могли бы вы дать совет, как это исправить?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 31 марта 2020

Причина, по которой ваш код не работает так, как вы думаете, описана в документации MDN String .

При использовании скобок для доступа к символам, попытка удалить или присвоить значение этим свойствам не удастся. Используемые свойства не являются ни записываемыми, ни настраиваемыми.

Альтернативный подход состоит в объединении первого символа после преобразования в верхний регистр с оставшейся строкой (исключая первый символ).

const titleCase = str => {
  return str.toLowerCase()
    .split(' ')
    .map(w => `${w[0].toUpperCase()}${w.substring(1)}`)
    .join(' ');
};

console.log(titleCase("I'm a little tea pot"));
0 голосов
/ 31 марта 2020

очень элегантно выглядит с цепочкой методов - split + map + join и шаблоны строки `$ {var1} $ {var2}` - в левой обратной кавычке "` " var1 - item [0] .toUpperCase () - первый символ toUpperCase var2 - item.substring (1) - убить первый символ .toLowerCase () - другие символы toLowerCase

const titleCase = (str) => str.split(' ')
  .map(item => (`${item[0].toUpperCase()}${item.substring(1).toLowerCase()}`))
  .join(' ')

console.log(titleCase("I'm a litTLE tea pot"));
0 голосов
/ 31 марта 2020

Похоже, что присвоение строк не работает так в Javascript, что очень плохо, оно интуитивно правильно.

Итак, используйте объединение строк, которого не существует, поэтому разбейте строку на массив символов с помощью str.split('') и используйте объединение массивов.

Сращивание изменяет входной массив на месте, поэтому вам не нужно переназначать его.

const str = "hello";
var rayy = str.split(''); // ['h', 'e', 'l', 'l', 'o']
rayy.splice(0, 1, rayy[0].toUpperCase()); // returns ['h], but rayy is now modified in place to ['H', 'e', 'l', 'l', 'o']
const str2 = rayy.join('');  // "Hello"

Ваше использование map является адептом и подходящим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...