b90a1dcd8fe2412e8d05679d6aab4a2e175edad1
写了一个忠实转写前端 v()/pe() 的参考实现做对拍,立刻发现一处真实偏差:
前端: tags = "a,b,c" (单个键)
Go: tags[0]=a tags[1]=b tags[2]=c (三个索引键)
前端 v() 对数组是两条分支:
if (s.some(l => l && typeof l == "object")) → 按下标展开 `${i}[${p}]`
else → const l = s.map(p => p ?? "").join(","); append(i, l)
我们只有前一条分支。学校端按 tags 读字符串时拿不到值。
此前几轮反复在「方括号 vs 点号」上判断失误,根因是仅凭注释与内部一致性
推断契约。这次改为用可执行的参考实现做对拍,让差异由测试暴露而不是靠人眼。
改动:
- xsgzFlatten 数组分支按是否有对象分流:纯原始值 join(",")(空数组
与全空值不提交),含对象才按下标展开;键名规则本身不变
(对象键点号、数组下标方括号);
- 新增 leave_xsgz_jsref_test.go:把前端 v()/pe() 转写成 jsFlatten,
用真实形态载荷(请假、销假、多字段、嵌套 map、空 fields)对拍,
双向断言「不缺键、不多键、值一致」;
- 记录一处有意差异并说明理由:前端会把 null 提交为空串,我们跳过空值,
对必填校验等价且更干净。
Description
No description provided
Languages
Go
58.2%
Vue
35.3%
TypeScript
4.1%
CSS
1.5%
JavaScript
0.6%
Other
0.2%