ES10 之 Flatten 嵌套数组
在日常的开发过程中,经常会遇到处理数组的情况,特别是数组嵌套的情况,我们需要将多层嵌套的数组平铺展开,使其形成一维数组,以便于数据的处理和统计。在 ES6 时代,我们就可以利用数组的 flat 方法来实现,但对于更加复杂的嵌套情况,我们还需要用到ES10中新增的 flatMap 方法来进行处理。
flat 方法
flat 方法可以将多维数组变成一维数组,使得数组的处理更加方便。该方法默认将所有的维度都展开,如果只展开一部分维度,可以传入参数指定展开的深度。
const arr = [1, 2, [3, [4, 5]]]; arr.flat(); // [1, 2, 3, [4, 5]] arr.flat(1); // [1, 2, 3, [4, 5]] arr.flat(2); // [1, 2, 3, 4, 5] arr.flat(Infinity); // [1, 2, 3, 4, 5]
flatMap 方法
flatMap 方法是 flat 方法的加强版,它提供了更加灵活的展开方式。该方法首先对原数组执行一个参数函数,然后对返回的结果进行一次 flat 操作,相当于对每个元素先执行 map 方法,然后将结果数组继续展开成一个新数组。
const arr = ["Hello World", "my name is John"]; arr.flatMap(x => x.split(" ")); // ["Hello", "World", "my", "name", "is", "John"]
注意,flatMap 方法最终返回的是一个一维数组,如果参数函数返回的是一个数组,该数组会作为一个整体被添加到新的数组中,而不是被展开为单独的元素。
实际应用
一般情况下,我们会用到 flat 方法将多维数组展开成一维数组,然后进行数据统计、过滤、排序等操作。但在某些特殊情况下,我们需要将一维数组转化成多维数组,这时候我们可以借助于一些方法来实现。
例如,我们有如下的一维数组:
const arr = [1, 2, 3, 4, 5];
现在我们需要将它转化成三个元素的二维数组,可以使用 slice 方法和 map 方法来实现。
const newArr = arr.slice(0, 3).map(x => [x]); // [[1], [2], [3]]
如果我们需要将它转化成两个元素的二维数组,可以通过使用 splice 方法来实现。
const newArr = []; while (arr.length > 0) { newArr.push(arr.splice(0, 2)); } // [[1, 2], [3, 4], [5]]
总结
ES10 中新增的 flatMap 方法让数组的处理更加灵活和方便,可以满足我们更为复杂的需求。在实际开发中,我们需要根据具体情况选择不同的展开方式,这样可以提高我们的开发效率和代码质量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6453157d968c7c53b0785c0d