Строка верблюда в обычную строку - PullRequest
2 голосов
/ 18 июня 2019

Как изменить NoOfSAP => Нет SAP? Я пробовал заменить метод, но он говорит неопределенным.

function unCamlelCase(result) {
  return result.key.replace(/([^A-Z]*)([A-Z]*)([A-Z])([^A-Z]*)/g, '$1 $2 $3$4')
    .replace(/ +/g, ' ');
};

Как изменить значение ключа результата в случае верблюда на обычную строку?

if (exactMatch) {
  const { ...response } = json[0];
  const result = Object.keys(response).reduce((acc, key) => {let newKey = key.charAt(0).toUpperCase() + key.slice(1);
  return acc;
}, {});

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Вы можете использовать следующее выражение с несколькими вспомогательными методами для очистки вывода:

"NoOfSAP".split(/([A-Z][a-z]+)/).filter(Boolean).join(' ');

Это будет соответствовать всем заглавным буквам, за которыми следуют одна или несколько строчных букв, и разбивать каждый кусок на массив. .filter(Boolean) затем используется для удаления любых пустых строк в массиве, а .join используется для добавления пробелов между строками в массиве.

См. Пример ниже:

const getWords = wrd =>
  wrd.split(/([A-Z][a-z]+)/).filter(Boolean).join(' ');
  
console.log(getWords("NoOfSAP")); // No Of SAP
console.log(getWords("ThisIsAWord")); // This Is A Word (notice how it will split individual letters such as A)
console.log(getWords("IAmAHuman")); // I Am A Human
console.log(getWords("JSIsGreat")); // JS Is Great (notice how it understands JS and Is are two seperate words and doesn't give JSI s Great)

В соответствии с вашим вопросом об изменении ключей в вашем объекте на ключи «без камеры», вы можете использовать .map с Object.keys для генерации вашего результата:

const getWords = wrd =>
  wrd.split(/([A-Z][a-z]+)/).filter(Boolean).join(' ');
  
const obj = {
  "NoOfSAP": 1,
  "NoOfBUN": 2,
  "NoOfBRE": 3,
  "NoOfPEA": 4
}

const result = Object.keys(obj).map(getWords);
console.log(result);
1 голос
/ 18 июня 2019

Вы можете пойти по этому пути:

const camelToWords = (camelCaseWord) => camelCaseWord
  .replace(/([A-Z]+)/g, " $1")
  .replace(/([A-Z][a-z])/g, "$1");

Также есть возможность использовать существующие библиотеки, такие как lodash:

const _ = require('lodash');
console.log(_.startCase('abcDef'));
// result: Abc Def
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...