JavaScript:反转数组字符序列后按原数组元素长度拆分
解决按原数组长度拆分反转字符串的问题
嘿,你已经完成了最关键的一步!现在就差把反转后的字符串按原数组元素的长度拆分成对应的新数组,我来给你一步步说明怎么实现:
首先看你当前的代码,它已经成功把整个数组拼接反转成了完整的字符串,但缺少了拆分的步骤。我们需要先拿到原数组每个元素的长度,再用这个长度数组去切割反转后的字符串。
完整实现步骤:
- 生成反转后的完整字符串:你这部分逻辑是对的,这里可以稍微简化一下写法:
const reversedStr = array.join('').split('').reverse().join(''); // 或者更简洁的写法:[...array.join('')].reverse().join('') - 获取原数组元素的长度数组:用
map方法遍历原数组,把每个元素的长度存起来:const lengths = array.map(item => item.length); - 按长度切割字符串并生成结果数组:初始化一个指针记录当前切割的起始位置,遍历长度数组,每次截取对应长度的子串添加到结果数组,同时更新指针位置。
最终完整函数:
function ultimateReverse(array) { // 得到反转后的完整字符串 const reversedStr = array.join('').split('').reverse().join(''); // 获取原数组每个元素的长度 const lengths = array.map(item => item.length); const result = []; let currentPos = 0; // 遍历长度数组,按规则切割字符串 for (const len of lengths) { result.push(reversedStr.slice(currentPos, currentPos + len)); currentPos += len; } return result; } // 测试你的示例 console.log(ultimateReverse(["I", "like", "big", "butts", "and", "I", "cannot", "lie!"])); // 输出:["!", "eilt", "onn", "acIdn", "ast", "t", "ubgibe", "kilI"] 完全符合期望!
为什么这样可行?
原数组每个元素的长度就是新数组对应元素的长度,反转后的字符串是整个原数组拼接后的反转结果,按照原长度依次截取,就能得到每个位置对应的反转后片段啦。
内容的提问来源于stack exchange,提问作者HappyHands31
相关产品推荐
相关产品推荐

