JavaScript数组中每个元素的大写偶数字符和小写奇数字符

时间:2018-12-07 19:19:06

标签: javascript arrays loops sorting

我需要在数组的每个元素中使用大写偶数字符和小写奇数字符,以便在输入“ This is a test”的情况下输出为“ 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'))

它无法按预期运行,由于缺乏经验,我无法确定缺少的内容。你能帮我这个忙吗?谢谢。

7 个答案:

答案 0 :(得分:1)

高尔夫版本:

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

如果您不在乎行长,那就是单线。

答案 1 :(得分:0)

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'))

答案 2 :(得分:0)

您可以将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'))

答案 3 :(得分:0)

我们可以使用基本映射来实现此目的,然后使用模块选择大/小写奇/偶值

  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'))

答案 4 :(得分:0)

您可以尝试

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)

答案 5 :(得分:0)

您可以使用Array.mapString.splitString.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.mapArray.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'))

答案 6 :(得分:0)

您可以使用简单的地图功能来做到这一点:

"This is a test"
   .split("")
   .map((s, i) => (i % 2 == 0 ? s.toUpperCase() : s))
   .join("");

Array.prototype.map()