JavaScript字符串相邻字符互换实现与运行报错解决咨询
报错原因
你收到的编译报错是指脚本第36行语法不符合规范:解析器本来期望读取对象键值对的冒号:,却读到了左括号(,大概率是你贴出的代码之外的部分存在语法错误,比如你误写了类似{__if()}的非法对象结构,或者代码缩进、括号闭合有问题,你可以定位到36行检查上下文中的对象声明语法。
原有实现思路问题
你的核心需求是将收到的字符串每两个字符为一组交换位置,奇数长度的字符串末尾单个字符保留,这个方向是对的,但你写的swap函数逻辑有严重问题:
- 多余的
do-while循环会导致无限重复交换同一组字符,完全没有必要 - 直接将
tmpArr赋值为传入的数组,属于引用传递,会修改原数组的内容 - 没有对数组长度为奇数的情况做兼容,当处理奇数长度字符串时,最后一次交换会给数组新增一个值为
undefined的元素
最简实现方案
直接用正则替换即可实现需求,不需要拆分数组遍历,代码更简洁性能也更好:
var attributes_ = [Name, Code, Firmware, Serial_Number, Label]; // 正则替换每两个字符交换位置,自动兼容奇数长度 var attributes = attributes_.map(item => { return item.replace(/\0/g, '').replace(/(.)(.)/g, '$2$1'); }); msg.Name = attributes; return {msg: msg, metadata: metadata, msgType: msgType};
正则/(.)(.)/g会全局匹配所有连续两个字符的分组,$2$1就是把第二个分组放到前面、第一个放到后面,自动跳过最后一个奇数位的单个字符,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者santobedi
相关产品推荐
相关产品推荐

