使用下划线按键查找值

Use underscore to find a value by key

我有一个字符串需要在 json 对象中搜索,然后 return 从找到的值中返回一个特定的哈希值。我让它在没有下划线的情况下工作,但优化不佳。我需要做的是在找到 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中的hash值,所以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 optimize/achieve 这个?

您可以在找到元素后打破循环

 var hash;

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

您可以这样使用_.findKey

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

请注意,此方法从v1.8.0 开始可用。