【问题标题】:Call a function in an array foreach loop with nested data使用嵌套数据在数组 foreach 循环中调用函数
【发布时间】:2017-05-08 12:27:38
【问题描述】:

以下显然不起作用,但这是我想要达到的目标:

items.forEach(addData(item.data));

我知道我能做到:

items.forEach(function(item){
    addData(item.data)
});

但我想知道是否有一种速记/更酷的方式来做到这一点。

编辑:

我也在调用相同的添加数据函数,其中包含一组项目 不是这样嵌套的:

items.forEach(addItemId)

这就是为什么我试图找到一种方法来为嵌套对象使用相同的函数(以类似的方式)。

【问题讨论】:

  • 拉姆达? items.forEach(item => addData(item.data));
  • 我认为常规 Javascript 中没有任何简写。 underscore.js 和 lodash 之类的库可能有办法做到这一点。
  • iirc 不能将函数参数绑定到函数@Barmar?
  • @SterlingArcher 那如何自动获取数组中每个元素的.data 属性?
  • 你可以调整addData函数来寻找.data:P

标签: javascript arrays function foreach


【解决方案1】:

使用 ES6 功能:Lambda。

items.forEach(item => addData(item.data));

我正在尝试在这里找到一种使用.bind 的方法,但老实说,这是一种非常干净的方法。一个班轮,function() { } 的简写。

【讨论】:

  • 来一点items.forEach(({ data }) => addData(data));
  • 我看到了这么花哨的解构吗?
  • 没错。如果你不能让自己觉得自己很聪明,那么编程还有什么意义呢?哈哈
【解决方案2】:

如果您可以更新您的函数以使用item 而不是item.data,您可以这样做:

items.forEach(addData);

这将调用 addData 每个item,而不是item.data

【讨论】:

  • 虽然这是事实,但 Barmar 有一个很好的观点,即这并不能概括解决方案。 OP 可能不想这样做,并且正在寻找一种方法来绑定 item.data 参数,而不是 item
【解决方案3】:

我不一定建议在生产代码中这样做,但你可以用一个小组合器来完成这样的事情:

const map_into = k => fn => o => fn(o[k]);

items.forEach(map_into('data')(addData));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2019-06-17
    • 2014-05-18
    • 2015-04-12
    相关资源
    最近更新 更多