Node.js/Javascript中使用Object.values获取JSON描述值报错解决
问题修复方案
你的代码报错是因为当description不存在时,Object.values(data)[0]?.description会返回undefined,而Object.values()不能接收undefined作为参数,导致抛出"Cannot convert undefined or null to object"错误。
以下是修复后的代码,实现存在时取描述值、不存在返回空字符串的需求:
const jsonValue = [ { files:{ title:{ "en": "test" }, description:{ "en": "dummy description" } } }, { files:{ title:{ "eu": "without description" } } }, ]; jsonValue.map((data) => { // 先安全获取description对象,不存在则用空对象兜底 const descObj = data.files?.description ?? {}; // 获取所有语言对应的描述值,取第一个(或根据需求处理多个值) const des = Object.values(descObj)[0] ?? ""; console.log(des); });
关键优化点:
- 直接使用
data.files替代Object.values(data)[0],代码更清晰且避免不必要的数组操作 - 用
?? {}给不存在的description兜底,确保Object.values()始终接收对象参数 - 通过
[0] ?? ""处理描述值为空数组的情况,返回空字符串
如果你的场景中description可能包含多个语言值,需要输出所有值的话,可以改成:
const des = Object.values(descObj).join(' ') ?? "";
内容的提问来源于stack exchange,提问作者Shiv
相关产品推荐
相关产品推荐

