becomer b90a1dcd8f xsgz 纯原始值数组改为 join(","),并引入对拍测试防止再次误读前端规则
写了一个忠实转写前端 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 提交为空串,我们跳过空值,
  对必填校验等价且更干净。
2026-10-17 18:25:23 +08:00
S
Description
No description provided
6.6 MiB
Languages
Go 58.2%
Vue 35.3%
TypeScript 4.1%
CSS 1.5%
JavaScript 0.6%
Other 0.2%