【问题标题】:lodash orderBy issues when trying to make it case insensitivelodash orderBy 尝试使其不区分大小写时出现问题
【发布时间】:2019-10-17 07:45:16
【问题描述】:

我已经编写了这个orderBy 条件来缩短对象数组,除非我尝试排序的值为空,否则它工作正常。下面你可以看到我的代码:

if (this.state.sortType === 'name asc'){
  medias = _.orderBy(medias,[media  => _.get(media,'metadata.title').toString().toLowerCase() ] , 'asc')
} else if (this.state.sortType === 'name desc'){
  medias = _.orderBy(medias, [media  => _.get(media,'metadata.title').toString().toLowerCase()], 'desc')
}

media.metadata.titlenull 时,它会抛出该错误:

无法读取未定义的属性“toString”

有什么想法吗?

【问题讨论】:

  • 你的输入数据是什么?似乎有些元素没有metadata: { title: "" } 属性
  • 从 JavaScript 1.8.5 开始,在 null 上调用的 toString() 返回 [object Null],而 undefined 返回 [object Undefined],如第 5 版 ECMAScript 和后续勘误表中所定义。参考:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @SibasishMohanty 这是我从未见过的行为,目前也不起作用。这要么用词不正确,要么完全错误。

标签: javascript arrays sorting lodash


【解决方案1】:

为什么不采用默认值_.get,例如一个空字符串,以防媒体对象中不存在元数据。

_.get(object, path, [defaultValue])
_.get(media,'metadata.title', '').toString()

【讨论】:

  • _.get 已经提供了默认值。直接传入第三个参数_.get(media, 'metadata.title', '')
猜你喜欢
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
相关资源
最近更新 更多