You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:39:05