javascript - 通过几个函数映射数组项

标签 javascript typescript

有没有比这个更优雅的方法来为数组中的每个项目连续执行几个函数:

type Transform<T> = (o: T) => T;
type Item = { /* properties */ };

transform(input, transformers: Transform<Item>[]) {
  const items: Item[] = getItems(input);
  return items.map(item => {
    let transformed = item;
    tramsformers.forEach(t => transformed = t(transformed));
    return transformed;
  })
}

最佳答案

这是 reduce 的一个很好的用例:

transform(input, transformers: Transform<Item>[]) {
  const items: Item[] = getItems(input);
  return items.map(item => transformers.reduce((val, transformer) => transformer(val), item));
}

或者更易读:

transform(input, transformers: Transform<Item>[]) {
  const items: Item[] = getItems(input);
  return items.map(
    item => transformers.reduce(
      (val, transformer) => transformer(val),
      item
    )
  );
}

实例:

function getItems(input) {
  return [
    "abcdefg",
    "1234567"
  ];
}
function transform(input, transformers) {
  const items = getItems(input);
  return items.map(item => transformers.reduce((val, transformer) => transformer(val), item));
}
const result = transform("x", [
  v => v.toUpperCase(),
  v => v.substring(1, v.length - 1)
]);
console.log(result);

正如 Nitzan Tomer 指出的那样,我们可以取消 items 常量:

transform(input, transformers: Transform<Item>[]) {
  return getItems(input).map(
    item => transformers.reduce(
      (val, transformer) => transformer(val),
      item
    )
  );
}

我经常保留这些东西用于调试,但现在一些好的调试器可以很容易地在函数返回之前查看函数的返回值(Chrome 的),所以如果你删除它,你可以进入 getItems 查看 map 之前的项目。

关于javascript - 通过几个函数映射数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45903387/

相关文章:

typescript - 如何从 Map<string, object> 方法返回强类型值

javascript - 使用来自 Browserify 和 Typescript 的源映射进行 Webstorm 调试

javascript - 在 C++ 自定义向导中创建项目模板之前获取现有解决方案名称

javascript - 使用 AngularJs 使用 Json 回调填充 Select 字段

javascript - Protractor 元素资源管理器不显示元素

javascript - 如何强制运行 swf 文件,而不是下载

javascript - 引导混合 Angular 1+2 应用程序

javascript - Phonegap - 可以隐藏 div,但不能显示

angular - 错误类型错误 : Cannot read property 'map' of undefined

带有不同类型可选键和 strictNullChecks 的 Typescript 接口(interface)类型