如何实现字符串隔词大写?filter返回element.toUpperCase()不生效问题
问题解答
问题2:filter方法返回element.toUpperCase()不生效的原因
你用错filter方法了!filter的核心作用是筛选数组元素,它的回调函数返回值只用来判断当前元素要不要保留——只要返回的是真值(非空字符串、非0数字等)就保留原元素,假值就丢弃。你返回element.toUpperCase(),本质上只是判断这个转换后的字符串是不是非空,只要原单词不是空的,就会把原来的element保留到结果数组里,根本不会替换成大写后的字符串。
而console.log(element.toUpperCase())能看到大写,是因为你确实执行了转换操作,但这个转换后的结果没被存到数组里,只是临时打印了而已。
问题1:实现字符串每隔一个单词大写的正确方式
要转换元素而不是筛选,应该用map方法,它会遍历数组并返回转换后的新元素。比如你想让索引为奇数的单词(从0开始计数)变成大写,代码可以这么写:
const sentence = "fur pillows are hard to actually sleep on"; const uppercaseOddWords = (string) => { // 分割成单词数组 const wordArray = string.split(" "); // 遍历转换每个单词:索引奇数则转大写,否则保留原词 const transformedArray = wordArray.map((element, index) => { return index % 2 !== 0 ? element.toUpperCase() : element; }); // 拼接成字符串并打印 console.log(transformedArray.join(" ")); }; uppercaseOddWords(sentence);
运行结果会是:fur PILLOWS are HARD to ACTUALLY sleep ON
如果你的需求是索引偶数的单词大写,把判断条件改成index % 2 === 0就行。
内容的提问来源于stack exchange,提问作者T D
相关产品推荐
相关产品推荐

