在数组中查找匹配元素并为每个匹配执行某些操作

时间:2017-02-08 13:41:52

标签: lodash

我对Lodash中可用的所有功能感到有些不知所措,所以我希望有人可以指出我确定存在的那个能为我做以下事情的人。我希望能够传递一个数组和一个搜索条件,让它遍历所有匹配的项目,允许我为每个项目运行一个函数。我现在拥有的是类似于此的东西:

_.each(myArray, (item) => {
    if (item.field=="whatever") {
      console.log("Matched by "+item.name);
    }
});

当然,这很好用。只是我确定Lodash有办法让我以某种方式将item.field=="whatever"移动到函数参数中,如果可以的话,我更愿意采用更惯用的Lodash方法。

1 个答案:

答案 0 :(得分:2)

  

只是我确定Lodash有办法让item.field == "whatever"以某种方式将_.filter(myArray, { field: 'whatever' }); 移动到函数参数中

如果您想根据传入的参数找到数组中的所有匹配项,那么您可以使用_.filter method,它可以在内部使用_.matches shorthand

_.each(_.filter(myArray, { field: 'whatever' }), item => {
  console.log("Matched by " + item.name);
});

但是,如果你想为每场比赛做点什么,你仍然需要循环遍历项目:

_.each()

或者,如果您想要一种不同的写入方式,可以使用lodash object wrapper, _()包装已过滤的项目,这实际上启用了链接,从而允许您链接_(_.filter(myArray, { field: 'whatever' })).each(item => { console.log("Matched by " + item.name); }); 方法:

var matchedItems = _.filter(myArray, { field: 'whatever' });
_(matchedItems).each(item => {
  console.log("Matched by " + item.name);
});

或者更易阅读的版本:

listen_addresses = '*'
local all all md5
host all all all md5

就个人而言,我可能会保留你最初写的内容,因为它简短,易读且易于维护。