четные символы upperCase и нечетные символы lowerCase в каждом элементе массива в JavaScript - PullRequest
0 голосов
/ 07 декабря 2018

Мне нужно в верхнем регистре четные символы и нечетные нечетные символы в каждом элементе массива, чтобы при вводе «Это тест» вывод был «ThIs Is A TeSt» (исключая пробелы, чтобы каждое слово начиналось сзаглавная буква).

Вот что я придумала до сих пор:

function toWeirdCase(string) {
  var reg = /\b(?![\s.])/
  var res = string.split(reg)
  var newArr = []

  for (let k = 0; k < res.length; k++) {
    for (let j = 0; j < res[k].length; j++) {
      if (j % 2 == 0) {
        res[k].charAt(j).toUpperCase()
      } else {
        res[k].charAt(j).toLowerCase()
      }
    }
    newArr.push(res[k])
  }
  return newArr.join('')
}

console.log(toWeirdCase('This is a test'))

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

Ответы [ 6 ]

0 голосов
/ 07 декабря 2018

Вы можете использовать Array.map и String.split, String.join, чтобы получить этот результат.Нанесите на карту слова и затем введите каждый символ, а если он прописной, то еще строчный.

const up = string => 
  string.split(' ')
  .map(word => word.split('')
    .map((chr, i) => chr[i%2 ? 'toLowerCase' : 'toUpperCase']()).join('')
  ).join(' ')

console.log(up('This is a test'))

Вы также можете решить эту проблему только с одним Array.map и Array.reduce:

const chg = wrd => wrd.split('').map((c,i) => c[i%2 ? 'toLowerCase' : 'toUpperCase']()).join('')
const up = str => str.split(' ').reduce((r,c) => r.concat(' ', chg(c)), '')

console.log(up('This is a test'))
0 голосов
/ 07 декабря 2018

Вы можете попробовать это

let str = "This is a test";

let op = str.split(' ').map((a,i)=>a.split('').map((e,i)=>i%2==0 ? e.toUpperCase() : e.toLowerCase()).join('')).join(' ');

console.log(op)
0 голосов
/ 07 декабря 2018

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

  1. Разделить каждое слово
  2. Разделить каждую букву в каждойслово
    1. Использовать модуль слова, а не предложение
  3. Соединить слово обратно вместе
  4. Соединить предложение обратно вместе

function toWeirdCase(str){
  return str.split(' ').map(word =>
    word.split('').map((itm, idx) => idx % 2 ? itm.toLowerCase() : itm.toUpperCase()).join('')
  ).join(' ')
}

console.log(toWeirdCase('This is a test'))
0 голосов
/ 07 декабря 2018

Golfier версия:

input
  .split(/\s+/)
  .map(wrd => wrd
    .split('')
    .map((c, i) => i % 2 ? c.toLowerCase() : c.toUpperCase())
    .join(''))
  .join(' ');

Если вам не важна длина линии, это однострочник.

0 голосов
/ 07 декабря 2018

Вы можете использовать String.replace() с внешней переменной, чтобы решить, должен ли текст быть прописными или строчными:

function toWeirdCase(string) {
  let uppercase = true;
  return string
    .replace(/./g, c => {
      const current = uppercase;
      
      uppercase = c === ' ' ? true : !uppercase;
    
      return current ? c.toUpperCase() : c.toLowerCase();
    });
}

console.log(toWeirdCase('This is a test'))
0 голосов
/ 07 декабря 2018

toUpperCase не изменяет строку на месте (строки JavaScript являются неизменяемыми).Вам необходимо присвоить результат обратно переменной.

function toWeirdCase(string) {
  var reg = /\b(?![\s.])/
  var res = string.split(reg)
  var newArr = []

  for (let k = 0; k < res.length; k++) {
    let newString = "";
    for (let j = 0; j < res[k].length; j++) {
      if (j % 2 == 0) {
        newString += res[k].charAt(j).toUpperCase()
      } else {
        newString += res[k].charAt(j).toLowerCase()
      }
    }
    newArr.push(newString)
  }
  return newArr.join('')
}

console.log(toWeirdCase('This is a test'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...