Nodejs以优雅的惯用方式访问对象属性的方式

时间:2016-05-06 10:39:09

标签: node.js

有些JSON被解析为对象,我需要访问它,但我不能100%确定该属性是否会一直存在。所以我有这样的事情:

if (val && val.date && val.date.title) {
 doSomething(val.date.title)
}
else {
 doSomethingElse()
}

它接收了node.js,它就像python一样,人们喜欢以更优雅的方式简化事物。并且感觉我可能没有正确使用nodejs语言,它完成了工作,但可能这是非惯用代码并且存在惯用代码。我试图搜索它,但无法找到直接答案。实现同样的事情的另一种方式是try / catch,但它仍然没有感受到惯用的方式

try {
  doSomething(val.date.title)
}
catch (e) {
  doSomethingElse()
}

或者就是这样,我只是看得太深入了。

1 个答案:

答案 0 :(得分:1)

您可以使用小模块get中的utjs函数。

var ut = require('utjs');

var obj = {a: {b: [{c:1, d: 2}, true]}};

ut.get(obj, ''); // Returns { a: { b: [ [Object], true ] } }
ut.get(obj, 'a'); // returns { b: [ { c: 1, d: 2 }, true ] }
ut.get(obj, 'a.b'); // returns [ { c: 1, d: 2 }, true ]
ut.get(obj, 'a.b[0]'); // returns { c: 1, d: 2 }
ut.get(obj, 'a.b[1]'); // returns true
ut.get(obj, 'a.b[0].c'); // returns 1
ut.get(obj, 'a.b[0].missing'); // returns undefined
ut.get(obj, 'a.b[0].missing.something'); // returns undefined

您可以使用已知模块lodash中的相同功能获得相同的功能,但速度较慢。