Функция для заголовка строки с использованием javascript

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

Итак, прямо сейчас эта функция неправильно использует заглавные буквы. Например, internet of things выходит как Internet Of Things, а мне нужно как Internet of Things

Это функция с настройкой, которую я сделал, в основном, если строка содержит «из», игнорируйте ее:

const cleanValue = value
        .replace(/-/g, ' ')
        .split(' ')
        .map((word, i) => {
            return word === 'of' && i != 0 ? word : word[0].toUpperCase() + word.substring(1);
        })
        .join(' ');

Но мой босс думает, что это какое-то хакерское решение, и просит меня найти лучшее решение, честно говоря, мне трудно попытаться исправить это лучше.

Любые советы/идеи, которые кто-нибудь может дать мне о том, как улучшить это?

Спасибо!

Это больше вопрос IR (Information Retrieval). Например, «учить» компьютер знать, когда что-то писать с большой буквы.

Shmack 26.01.2023 00:17

проблема в том, что вам нужно определить, какие слова должны быть исключениями. Например, мы знаем, что один из них, но как насчет (как во «Властелине колец»)? или и (как в Mac и Cheese) - надеюсь, вы можете сказать, как, чем больше исключений вы определяете, тем менее практичным кажется ваше решение.

blurfus 26.01.2023 00:19

Идеи: stackoverflow.com/a/6475125/271415

jarmod 26.01.2023 00:34

Невозможно всегда быть правильным, когда ввод был преобразован в формат, который теряет данные. Ваше решение кажется хорошим в качестве быстрого решения — оно расширяется до массива слов, которые не должны писаться с заглавной буквы, как видно из ответа includes — и если вам нужно что-то действительно надежное, тогда потребуется больше контекста (например, вы хотите дойти до того, чтобы попытаться понять язык?).

Ry- 26.01.2023 00:39

Что ж, вариант использования, лежащий в основе логики этой функциональности, заключается в том, что будет использоваться определенная группа фраз, которые, насколько я знаю, не содержат никаких других слов-исключений, отличных от: «из и,» для проверки других вещей. Итак, я думаю, что с предложенными ответами я получил то, что мне нужно, спасибо!

ypdev19 26.01.2023 01:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
65
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Итак, вот решение javascript.

Предположим, вы получили строку с данными имени

const ignoreWords = ["of", "the", "and"]; //used as references other codes from this post

function stringUpperCase(Data){

let ArrayOfStrings = Data.split(" ");
let ArrayUpperCased = [];
    
ArrayOfStrings.map((word) =>{

if (!ignoreWords.includes(word.toLowerCase())){

    ArrayUpperCased.push(word.charAt(0).toUpperCase() + word.slice(1)); //captalize the word
    return;
}
ArrayUpperCased.push(word.toLowerCase());
return ;
    
})

return ArrayUpperCased.join(" ");

}

stringUpperCase("Test Of Text")
// return 'Test of Text'

Таким образом, вы можете настроить слова, которые вы хотите игнорировать, и те, которые вы хотите использовать в верхнем регистре;

Соответствующая часть этого кода такая же, как исходный код, а остальная часть хуже.

Ry- 26.01.2023 00:35

поэтому я не понимаю, чего он хочет, я подумал, что ему просто нужен рефакторинговый способ сделать это.

Vicente 26.01.2023 00:49
Ответ принят как подходящий

Если вы хотите игнорировать некоторые слова, вы можете изменить свою функцию следующим образом.

const ignoreWords = ["of", "the", "and"];
const cleanValue = value
        .replace(/-/g, ' ')
        .split(' ')
        .map((word) => {
            return ignoreWords.includes(word.toLowerCase()) ? word : word[0].toUpperCase() + word.substring(1);
        })
        .join(' ');

Не уверен, что мне нравится эта идея — и она не очень эффективна — но она достаточно гибкая, чтобы приспособить кучу произвольных правил.

Вы можете объявить набор преобразователей, каждый из которых имеет 1) предикатную функцию, которая определяет, обрабатывает ли он конкретный случай, и 2) функцию для выполнения преобразования.

Последний трансформатор в наборе используется по умолчанию. Его предикат всегда возвращает true, и он использует заглавные буквы.

Разделите строку на слова и для каждого слова найдите преобразователь, который будет его обрабатывать.

const lowerMiddleWords = ['a', 'at', 'of', 'and', 'the', 'for', 'with'];

const capitalize = (word) => word[0].toUpperCase() + word.substring(1);

const transformers = [
  {
    predicate: (word, index) => index && lowerMiddleWords.includes(word),
    transform: (word) => word,
  },
  {
    predicate: (word, index, phrase) => phrase.includes('hackers'),
    transform: (word) => capitalize(word.replaceAll('e', '3')),
  },
  {
    predicate: () => true,
    transform: capitalize,
  }
]

function transform(string) {
  return string.split(' ').map((word, index) => {
    const transformer = transformers.find((t) => t?.predicate(word, index, string));
    return transformer.transform(word);
  }).join(' ');
}

[
  "internet of things",
  "for the birds",
  "at peace with the world",
  "the good, the bad, and the ugly",
  "capitalize all of the things",
  "leet hackers like threes",
].forEach(str => console.info(transform(str)));

Другие вопросы по теме