使用下划线按键查找值

时间:2016-04-20 19:08:05

标签: javascript underscore.js

我有一个字符串,我需要在json对象中搜索并从该找到的值返回一个特定的哈希值。我让它在没有下划线的情况下工作,但它的优化程度很低。我需要做的是在找到fileToSearch字符串后立即停止循环。

例如,我在这里有一个json对象:

  var json = {
    "images/mike.jpg" : "images/mike.12345.jpg",
    "images/joe.jpg" : "images/joe.axcvas.jpg",
    "images/mary.jpg" : "images/mary.mndfkndf.jpg",
    "images/jane.jpg" : "images/jane.dfad34.jpg",
  };

我有一个变量fileToSearch,我需要在上面的对象中查找。

 var fileToSearch = "joe.jpg";

输出的内容是images/joe.axcvas.jpg中的哈希值,因此axcvas

没有下划线:

  var hash;

  for (var key in json) {
    var index = key.indexOf(fileToSearch);
    if (index !== -1) {
      hash = json[key].split('.')[1];
    }
  }
  console.log(hash); //axcvas

如何使用Underscore优化/实现此目标?

2 个答案:

答案 0 :(得分:4)

您可以这样使用_.findKey

var key = _.findKey(json, function(value, key) {
    return key.indexOf(fileToSearch) >= 0;
});
var hash = key? json[key].split('.')[1] : undefined;

请注意,此方法自v1.8.0起可用。

答案 1 :(得分:0)

您可以在找到元素

时中断循环
 var hash;

 for (var key in json) {
     var index = key.indexOf(fileToSearch);
     if (index !== -1) {
       hash = json[key].split('.')[1];
       break;
     }
 }
 console.log(hash);