我从Google Books API调用中收到了一些数据,我正在将数据映射到一个我可以使用的更轻的数组中。我正在使用这一行来映射我感兴趣的数据:
data.items.map(function(book) {
return { googleId : book.id, image : book.volumeInfo.imageLinks.thumbnail, authors : reduceAuthors(book.volumeInfo.authors), title : book.volumeInfo.title, subtitle : book.volumeInfo.subtitle, publishedDate : book.volumeInfo.publishedDate, publisher : book.volumeInfo.publisher}
});
大多数情况下它的工作正常,但有时缺少其中一个元素,可能是imagelinks
或authors
因此我收到此错误"Uncaught TypeError: Cannot read property of undefined"
。
避免此错误的最佳方法是什么?
我想到的唯一解决方案是首先对整个数据进行健全性检查并仅在之后应用地图,但是可能有更好的解决方案?并且在try和catch中包装所有内容会使我过早地退出映射操作,并且不会完成剩余的数据。
答案 0 :(得分:1)
您可以在map()
函数内检查它,而无需先处理整个数据。使用三元条件,像这样:
image : ((book.volumeInfo.imageLinks) ? book.volumeInfo.imageLinks.thumbnail : undefined)
因此,如果book.volumeInfo.imageLinks
为空/空/未定义,则不会出现错误,插入的值将为undefined
,否则会捕获缩略图值。