如何在map函数中检查JSON响应对象的指定键是否存在?
检查对象键是否存在并提取指定字段的几种方法
嘿,这个场景太常见了!API返回的数组里总有几个“不按常理出牌”的对象,缺个字段很正常。我给你几种在map函数里检查键是否存在的实用方法,你可以根据需求选:
方法1:用in操作符(简单直接)
in操作符会检查对象(包括其原型链)是否包含指定的键,对于API返回的普通对象来说完全够用。你可以这样写:
this.serv.getInfo(code) .subscribe(res => { this.data = res.map(el => { return { key_2: el.key_2, // 如果key_3存在就用它的值,否则设为undefined(或者你想要的默认值,比如null、空字符串) key_3: 'key_3' in el ? el.key_3 : undefined }; }); });
方法2:用hasOwnProperty()(更严谨)
如果你担心原型链上的属性干扰(虽然API返回的对象一般不会有这个问题),可以用hasOwnProperty(),它只检查对象自身的属性:
this.serv.getInfo(code) .subscribe(res => { this.data = res.map(el => { return { key_2: el.key_2, key_3: el.hasOwnProperty('key_3') ? el.key_3 : '默认值' // 替换成你需要的默认值 }; }); });
方法3:可选链+空值合并(最简洁现代)
如果你用的是较新版本的TypeScript/JavaScript,可选链?.和空值合并操作符??能让代码更简洁,还能精准处理null/undefined的情况:
this.serv.getInfo(code) .subscribe(res => { this.data = res.map(el => { return { key_2: el.key_2, // 如果key_3不存在或者值为null/undefined,就用默认值;其他假值(比如0、'')会保留 key_3: el.key_3 ?? '默认值' }; }); });
这里要注意:??和||的区别是,||会把所有假值都替换成默认值,而??只针对null和undefined,如果你需要保留0或空字符串这类值,用??更合适。
内容的提问来源于stack exchange,提问作者user4851126
相关产品推荐
相关产品推荐

