我有一个对象(从graphQl查询返回),我正在迭代,以便在使用数据之前使数据结构更简单。数据模型中有一些非必需字段,我希望在数据存在时使用数据,默认情况下不使用数据。
这是我目前的职能:
const parseNovice = data => {
return data.allContentfulNovica.edges.map(edge => {
return {
createdAt: edge.node.createdAt,
id: edge.node.id,
slika: edge.node.slika.file.url || undefined,
tekst: edge.node.tekst.tekst || undefined,
naslov: edge.node.naslov
};
});
};
我得到的错误是:
TypeError:无法读取null
的属性'file'
换句话说,缺少图像文件,因此未定义文件属性。无论链中的哪个属性丢失,我有没有办法默认为undefined?
我应该使用try / catch吗?
答案 0 :(得分:1)
不是干净的本地方式。您需要完全undefined
检查。你应该考虑lodash impliments _.get()
。它包含了进行undefined
检查的逻辑。因此,如果您发现自己经常进行这些深度undefined
检查,您可能需要考虑使用它或编写自己的实用程序函数。
否则你必须写下这样的东西:
let edge;
let thing = {
prop: edge !== undefined && edge.node !== undefined && edge.node.tekst !== undefined && edge.node.tekst.tekst !== undefined ? edge.node.tekst.tekst : undefined,
prop2: _.get(edge, "node.tekst.tekst")
}
console.log(thing); // undefined
edge = {
node: {
tekst: {
tekst: "foo"
}
}
};
thing = {
prop: edge !== undefined && edge.node !== undefined && edge.node.tekst !== undefined && edge.node.tekst.tekst !== undefined ? edge.node.tekst.tekst : undefined,
prop2: _.get(edge, "node.tekst.tekst")
}
console.log(thing); // foo

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
&#13;