js实现flatmap
实现 flatMap 的方法
在 JavaScript 中,flatMap 是一种结合了 map 和 flat 功能的高阶函数。它会先对数组的每个元素执行映射操作,然后将结果“扁平化”一层。以下是几种实现方式:
使用 Array.prototype.flatMap(原生方法)
现代 JavaScript 引擎(ES2019 及以后)原生支持 flatMap:

const arr = [1, 2, 3];
const result = arr.flatMap(x => [x * 2]); // [2, 4, 6]
手动实现 flatMap
如果环境不支持原生 flatMap,可以通过组合 map 和 flat 实现:

function flatMap(arr, callback) {
return arr.map(callback).flat();
}
// 示例
const arr = [1, 2, 3];
const result = flatMap(arr, x => [x, x * 2]); // [1, 2, 2, 4, 3, 6]
不依赖 flat 的 polyfill 实现
通过 reduce 直接实现扁平化逻辑:
function flatMap(arr, callback) {
return arr.reduce((acc, item) => acc.concat(callback(item)), []);
}
// 示例
const arr = [[1], [2, 3], [4]];
const result = flatMap(arr, x => x.map(v => v * 2)); // [2, 4, 6, 8]
支持深度扁平化的扩展实现
如果需要自定义扁平化深度,可以扩展实现:
function flatMap(arr, callback, depth = 1) {
return arr.map(callback).flat(depth);
}
// 示例
const arr = [1, [2, [3]]];
const result = flatMap(arr, x => [x], 2); // [1, 2, 3]
注意事项
- 原生
flatMap只能扁平化一层,多层级需要配合flat使用。 - polyfill 实现时注意
callback应返回数组,否则需要额外处理。 - 性能敏感场景建议测试不同实现的效率。






