检查任何对象的'undefined'或'null'

tut*_*eed 5 javascript lodash angular

我正在研究Angular项目,我不得不检查undefinednull使用Object或它的属性.通常我使用lodash _.isUndefined()参见下面的例子:

this.selectedItem.filter(i => {
    if(_.isUndefined(i.id)) {
      this.selectedItem.pop();
    }
})
Run Code Online (Sandbox Code Playgroud)

我看不出任何问题.但在审查上述代码时,我与我的同事进行了讨论.他告诉我,如果在声明之前i获取undefined,if那么它将抛出异常.相反,他建议我总是检查ii.id喜欢这个:

if(!!i && !!i.id) {
      this.selectedItem.pop();
}
Run Code Online (Sandbox Code Playgroud)

我确信他试图说的不同于他undefined在上面的代码中检查的方式.但后来我想到了洛达什的目的是什么_.isUndefined

谁能告诉我什么是最好或最干净的方法.因为对我!!i && !!i.id来说根本不可读.

提前谢谢了.

Ori*_*ori 8

你可以_.isNil()用来检测undefinednull.既然你正在使用Array.filter(),你想要返回结果!_.isNil().既然i应该是一个对象,你可以使用!_.isNil(i && i.id).

注意:您使用的Array.filter()Array.forEach().回调Array.filter()应返回一个布尔值,过滤器的结果是一个新数组.

const selectedItem = [
  undefined,
  {},
  { id: 5 },
  undefined,
  { id: 7 },
];

const result = selectedItem.filter(i => !_.isNil(i && i.id));

console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

您还可以使用_.reject()并保存添加的需要!:

const selectedItem = [
  undefined,
  {},
  { id: 5 },
  undefined,
  { id: 7 },
];

const result = _.reject(selectedItem, i => _.isNil(i && i.id));

console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)