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

JavaScript按条件创建同结构对象及代码正确性校验

原有代码的正确性判断

你写的实现不正确,存在3个核心问题:

  • 你把reqBodyAddress.addressType赋值成了一个函数,但全程没有调用这个函数,最终做JSON序列化时,函数类型的属性会被直接忽略,根本得不到你预期的地址类型值。
  • 即便你调用了这个函数,JS里直接用+拼接两个对象,会把对象转成原始类型字符串,最终得到的是"[object Object][object Object]"这种无意义的字符串,完全不是合法的对象结构。
  • 你定义的{home:'home'}和{mailing:'mailing'}两个对象键名不一致,不符合你提到的“两个结构相同的对象”的要求,同结构对象应该保持键名统一,值做区分。
正确实现方案

根据需求,默认传递值为home的对象,条件为真时追加值为mailing的同结构对象,不需要多余的函数包裹,根据接口常见的两种参数要求,对应实现如下:

  • 如果接口要求地址类型以对象数组形式传递(同结构条目最常用的传参格式):
var arrayObj = []
var reqBodyAddress = {};

reqBodyAddress.startDate = new GlideDateTime(current.u_data_inizio_contratto).getNumericValue();
// 初始化地址类型数组,默认放入home对象,键名value可根据接口实际要求替换,保证两个对象键名一致即可
reqBodyAddress.addressType = [{ value: 'home' }];

if (current.u_domicilio === true) {
    reqBodyAddress.addressType.push({ value: 'mailing' });
}

arrayObj.push(reqBodyAddress);
var sReqBodyData = JSON.stringify(arrayObj);
  • 如果接口要求直接把多个类型键值对合并到同一个addressType对象里(即不需要数组,addressType本身是对象,默认有home键,条件满足时多一个mailing键):
var arrayObj = []
var reqBodyAddress = {};

reqBodyAddress.startDate = new GlideDateTime(current.u_data_inizio_contratto).getNumericValue();
reqBodyAddress.addressType = { home: 'home' };

if (current.u_domicilio === true) {
    reqBodyAddress.addressType.mailing = 'mailing';
}

arrayObj.push(reqBodyAddress);
var sReqBodyData = JSON.stringify(arrayObj);

两种写法序列化后都是合法的JSON结构,你可以根据对接的接口实际参数要求选择对应写法即可。

内容的提问来源于stack exchange,提问作者fabrizio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:15:48