JavaScript实现检测JSON属性是否未定义的通用函数方案
解决方案
你的问题核心是:当JSON属性为undefined时,不想执行setvar,而不是给setvar传一个“处理后的值”。你之前的checkNull函数之所以无效,是因为即使属性是undefined,你依然会调用setvar("a", undefined),这和直接写setvar("a", file.a)没有区别。
下面是几种通用实现方式:
方式一:封装判断+赋值逻辑的函数,批量处理
先定义需要处理的属性列表,再通过循环批量执行判断和赋值:
var file = JSON.parse(getvar("fileJSON")); console.log(JSON.stringify(file)); // 定义要处理的属性(JSON属性名与setvar的键一致) const targetProps = ["a", "b", "c", "d", "e", "f"]; // 封装通用判断函数 function setIfExists(obj, propName, varKey) { if (typeof obj[propName] !== "undefined") { setvar(varKey, obj[propName]); } } // 批量处理所有属性 targetProps.forEach(prop => { setIfExists(file, prop, prop); });
如果JSON属性名和setvar的键不一致,可改用映射对象:
// 属性映射:JSON属性名 → setvar的键 const propMap = { "jsonA": "a", "jsonB": "b", // 其他属性... }; Object.entries(propMap).forEach(([jsonProp, varKey]) => { if (typeof file[jsonProp] !== "undefined") { setvar(varKey, file[jsonProp]); } });
方式二:解构后批量判断
先解构出所有需要的属性,再遍历判断赋值:
var file = JSON.parse(getvar("fileJSON")); console.log(JSON.stringify(file)); // 解构获取所有目标属性 const { a, b, c, d, e, f } = file; // 批量处理:属性值与对应键的数组 const values = [a, b, c, d, e, f]; const keys = ["a", "b", "c", "d", "e", "f"]; values.forEach((val, index) => { if (typeof val !== "undefined") { setvar(keys[index], val); } });
为什么你的checkNull无效?
当file.a是undefined时,checkNull(file.a)会返回undefined,此时你依然执行了setvar("a", undefined),这和直接写setvar("a", file.a)的效果完全一样——并没有跳过赋值操作。你真正需要的是只有属性存在时才调用setvar,而不是传递一个“处理后的值”。
内容的提问来源于stack exchange,提问作者codeG
相关产品推荐
相关产品推荐

