首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我如何在JavaScript中构建一个过滤器链,以lodash的包装风格?

我如何在JavaScript中构建一个过滤器链,以lodash的包装风格?
EN

Stack Overflow用户
提问于 2018-08-20 22:46:33
回答 1查看 147关注 0票数 4

为了清楚起见,给出一个对象数组,可能具有同质的键:

const data = [
  { name: "tomato", isHealthy: true, "calories": 300 },
  { name: "french fries", isHealthy: false, "calories": 1000 },
  { name: "lettuce", isHealthy: true, "calories": 100 },
  { name: "nacho cheese", isHealthy: false, "calories": 1200 },
  { name: "boring chicken", isHealthy: true, "calories": 500 },
];

一些过滤器会说:

const isHealthy = function(items) {
  return items.filter(i => i.isHealthy);
};

const caloriesAbove = function(items, calories) {
  return items.filter(i => i.calories > calories);
};

我希望能够像这样调用筛选器链:

wrapper(data).isHealthy().caloriesAbove(500).value.map(...)

很难理解lodash是如何做到这一点的。此外,有没有一种方法可以做到这一点,而不需要显式地展开才能获得值?这不是一个要求,因为我认为这可能不得不使用不受欢迎的黑客。

EN

回答 1

Stack Overflow用户

发布于 2018-08-21 03:56:28

我读了答案,我喜欢@Jonas做这件事的方式。我不知道你可以像这样简单地扩展数组。定义得到我的赞成票了!

话虽如此,我想知道当您只需创建一个filter函数来处理多个值并将其传递给数组的filter时,这种方法会有多大用处:

const data = [
  { name: "tomato", isHealthy: true, "calories": 300 },
  { name: "french fries", isHealthy: false, "calories": 1000 },
  { name: "lettuce", isHealthy: true, "calories": 100 },
  { name: "nacho cheese", isHealthy: false, "calories": 1200 },
  { name: "boring chicken", isHealthy: true, "calories": 500 },
];

const myFilterFn = ({isHealthy, calories}) => isHealthy && calories > 200

data.filter(myFilterFn).map(x => console.log(x))

我在更一般的视图中看到了这一点的价值,但对于过滤来说,它似乎有点过头了。

就我的两分钱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51933281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档