【问题标题】:Capitalize first letter of every other array element将每个其他数组元素的第一个字母大写
【发布时间】:2021-05-17 07:03:45
【问题描述】:

我有一个元素数组["apple", "cherry", "raspberry", "banana", "pomegranate"],我希望它使每个奇数元素都大写:["Apple", "cherry", "Raspberry", "banana", "Pomegranate"]

我可以将数组中的每个元素都大写,也可以过滤掉每个奇数元素,但不能同时过滤(即过滤只显示奇数元素)。

有没有人对此有任何方法和/或建议?我已经看到有关大写所有其他字母、检索所有其他数组元素等的问题,但与我所问的完全不同(但是,我仍在寻找)。

function alts(arr) {
    const newArr = arr.filter((el, idx) => {
        if (idx % 2 === 0) {
            return arr.map(a => a.charAt(0).toUpperCase() + a.substr(1));
        }
    })
    return newArr;
}

console.log(alts(["apple", "cherry", "raspberry", "banana", "pomegranate"]));
// Just returns [ 'apple', 'raspberry', 'pomegranate' ]

【问题讨论】:

  • 你知道输入arr的偶数索引处是否没有空字符串吗?如果你不这样做,你可能想要添加一个检查或预先对其进行预处理,因为我认为你现有的答案和所有答案都会引发错误。

标签: javascript arrays string algorithm methods


【解决方案1】:

你可以使用一个简单的for-loop,如下:

function alts(arr=[]) {
  const newArr = [...arr];
  for(let i = 0; i < newArr.length; i+=2) {
    const current = newArr[i];
    if(current)
      newArr[i] = current.charAt(0).toUpperCase() + current.substr(1);
  }
  return newArr;
}

console.log(alts(["apple", "cherry", "raspberry", "banana", "pomegranate"]));

【讨论】:

    【解决方案2】:

    试试这个:

    function alts(arr) {
        return arr.map((el, idx) => {
            return idx % 2 == 0 ? el.charAt(0).toUpperCase() + el.substr(1) : el;
        })
    }
    
    console.log(alts(["apple", "cherry", "raspberry", "banana", "pomegranate"]));

    我映射数组,如果元素的索引是偶数(这是因为索引从 0 开始,所以当我们从 1 开始计数时它会为我们翻转)然后返回第一个字母大写的元素,如果它是奇数索引,然后只返回元素本身。

    【讨论】:

      【解决方案3】:

      function alts(arr) {
        return arr.map((item, index) => {
          if (index % 2 === 0) {
            return item.charAt(0).toUpperCase() + item.substr(1);
          } else {
            return item
          }
        });
      }
      
      console.log(alts(["apple", "cherry", "raspberry", "banana", "pomegranate"]));
      // Just returns [ 'apple', 'raspberry', 'pomegranate' ]

      【讨论】:

        【解决方案4】:

        映射而不是过滤 - 在回调内部,如果是偶数,则返回大写部分,否则返回原始字符串:

        function alts(arr) {
          return arr.map((str, i) => i % 2 === 1 ? str : str[0].toUpperCase() + str.slice(1));
        }
        
        console.log(alts(["apple", "cherry", "raspberry", "banana", "pomegranate"]));

        【讨论】:

          猜你喜欢
          • 2011-08-18
          • 1970-01-01
          • 2021-09-16
          • 2019-04-20
          • 1970-01-01
          • 2015-10-24
          • 2020-10-06
          • 1970-01-01
          相关资源
          最近更新 更多