【问题标题】:How can I make this implementation even shorter?我怎样才能使这个实现更短?
【发布时间】:2019-11-10 16:12:14
【问题描述】:

我想缩短这个实现。

const person1 = {
  data: () => ({ name: 'Andrei' })
}

const users = [person1];

const parse = (doc) => {
  return (callback) => {
    return callback(doc.data())
  };
};

users.map(doc => parse(doc)(user => console.log(user)));

我正在考虑这样的事情,因为 parse 函数已经从 map 中获取参数,但我不知道该怎么做,甚至是否可能。

users.map(parse (user => console.log(user)));

【问题讨论】:

  • 你想缩短哪一行?只有最后一个,其余的都给?
  • 很简单,console.log({name:'Andrei'}) 给出相同的结果:)
  • @Bergi 是的,最后一个
  • @AndreiZgîrvaci 那么无尽有答案 - 扔掉所有东西。假设你想保留users 数组,为什么不写users.forEach(user => console.log(user.data())) - parse 的目的是什么?你想如何重用它?为什么要用数组map的方法,你期待什么结果吗?
  • 然后像往常一样将其包装在一个函数中,当您有重复的代码时。让它返回一个承诺(就像你已经使用它一样),不要传递回调。

标签: javascript arrow-functions


【解决方案1】:

我终于找到了解决这个问题的最短方法:

const person1 = {
  data: () => ({ name: 'Andrei' })
}

const users = [person1];

function produce() {
  return function (doc) {
    return doc.data();
  }
}

users.map(
  produce(user => {
    console.log(user);
  })
)

我使用 curried 调用来解决这个问题,灵感来自很棒的库 immmer.js -> https://github.com/immerjs/immer/blob/a9c0fd02c7575cfa6e61563e50a51ccc71949d9d/src/immer.js#L37

【讨论】:

  • 这毫无意义,produce 不再接受参数,因此console.log 函数被丢弃
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 2020-02-07
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2015-03-13
相关资源
最近更新 更多