You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将我的JavaScript解决方案改造为函数式风格?

嘿,这事儿好办!咱们用原生JavaScript的数组方法就能改成纯函数式的写法,完全不用手动维护数组和push元素,一步到位~

函数式风格实现方案

方案一:使用flatMap(推荐)

flatMap天生就是为这种“映射+扁平化数组”的场景设计的,它会先对每个元素执行映射逻辑,再自动将结果扁平化一层,完美匹配我们的需求:

function getItems() {
  return obj.field.flatMap(currentField => {
    // 严谨判断:仅当items是数组且非空时返回它,否则返回空数组(扁平化时会被忽略)
    return Array.isArray(currentField.items) && currentField.items.length 
      ? currentField.items 
      : [];
  });
}

方案二:兼容旧环境的map + flat组合

如果你的运行环境刚好不支持flatMap(不过Angular 5对应的浏览器环境基本都支持),可以用map先生成嵌套数组,再用flat(1)扁平化一层:

function getItems() {
  return obj.field
    .map(currentField => 
      Array.isArray(currentField.items) && currentField.items.length 
        ? currentField.items 
        : []
    )
    .flat(1);
}

逻辑说明

  • 两种方案都去掉了手动维护的items变量,完全通过数组方法的链式调用/组合实现结果返回。
  • 相比你原来的currentField.items && currentField.items.length判断,我们新增了Array.isArray()检查,能更严谨地过滤掉items: false这类非数组的假值,避免潜在的错误。
  • 不符合条件的项会返回空数组,在扁平化过程中这些空数组会被自动忽略,不会影响最终结果。

测试结果

运行上述代码,同样会得到你预期的结果:

[ { wateva: 'wateva1' }, { yeah: 7 } ]

内容的提问来源于stack exchange,提问作者impregnable fiend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:35:58