当数据未定义或为空时如何使用Lodash

时间:2018-08-10 06:08:58

标签: javascript angular typescript angular5 lodash

在我的应用程序中,如果数据是未定义的或来自服务的null,我的html将不会加载,并且会出现“数据未定义”错误 所以我想使用lodash,但不知道如何使用。.

在我的以下ts文件中

    this._PartService.GetDataValues().subscribe(
  result => {
    this.distributionData = this._PartService.part_data.partMasterDataCompleteList[0].partMasterData.plantSupplies.plantSupply
  }

如果没有数据,我将得到“ partMasterDataCompleteList”为undefiend或null,所以我尝试使用Lodash,但我不知道如何使用它

3 个答案:

答案 0 :(得分:1)

要处理未定义的情况,请使用以下内容:

this.distributionData =((((this._PartService.part_data.partMasterDataCompleteList || [])[0] || {}).partMasterData || {}).plantSupplies || {}).plantSupply

尽管更好的方法是让服务器发送一个空数组,而不是未定义或为空。

这不是lodash的问题。这只是处理未定义或空的情况

答案 1 :(得分:1)

您可能想使用_.get函数。

this.distributionData = _.get(this, '_PartService.part_data.partMasterDataCompleteList[0].partMasterData.plantSupplies.plantSupply')

答案 2 :(得分:1)

Lodash提供了许多方法来检查并从对象获取所需的值。

_.get实际上会返回值(如果存在),并且会返回undefined(如果不存在)。

_.has检查该值是否存在,如果存在则返回true,如果不存在则返回false

_.hasIn_.has的作用相同,但还会检查这是否是继承的属性。

_.result实际上会沿路径行进并返回值,但有一个主要区别……它将执行获取值的方法中的任何功能

示例:

var data = { more: { result: 1}}
var data2 = _.create({ 'more': _.create({ 'result': 2 }) });
var data3 = { more: function() { return { result: 1} }}

console.log(_.get(data, 'more.result'))     // 1
console.log(_.has(data, 'more.result'))     // true
console.log(_.hasIn(data2, 'more.result'))  // true
console.log(_.result(data3, 'more.result')) // 1
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>