具有条件

时间:2017-07-05 08:26:12

标签: javascript ecmascript-6 arrow-functions

这个问题是关于改进工作代码。我有一个函数showLabels,它接受一个值,遍历一个对象,并通过将值与对象键进行比较来定义要返回的标签。

  showLabels = (value) => {
    Object.keys(this.state.labels).forEach( key => {
      if (value <= key) this.tooltip = this.state.labels[key];
    });
    return this.tooltip;
  }

问题:是否有可能使这更简洁?特别是将函数的值赋给this.tooltip然后在外部函数中返回它似乎不必要地冗长。

示例

基于评论,这是一个例子:

this.state.labels = {0: "Smallest amount", 50: "In the middle", 100: "Top"}
value = 33
//showLabels(value=33) should return "In the middle"

2 个答案:

答案 0 :(得分:2)

您可以在Array.prototype.find

上使用Object.entries

&#13;
&#13;
 showLabels = value => Object.entries(this.state.labels)
                             // sort pairs by key
                             .sort(([keyA], [keyB]) => keyA > keyB)
                             .find(([key]) => key > value)[1]
 
&#13;
&#13;
&#13;

BTW请记住,无法保证按键的迭代顺序。因此,假设您要查找第一个大于值的标签,则需要对标签进行排序。

答案 1 :(得分:0)

&#13;
&#13;
showLabels = (value) => {
  let tooltip, { labels } = this.state
  Object.keys(labels).forEach( key => {
    if (value <= key) tooltip = labels[key];
  })
  return tooltip;
}
&#13;
&#13;
&#13;

这样的事情更简洁。你需要在这里使用Object.keys()吗?它很慢。

无论如何,我在开始时添加了变量声明和解构。