在前端开发过程中,经常需要对多维数组进行处理,将其扁平化或者进行其他操作。ES9引入了两个新方法flat
和flatMap
,这两个方法非常实用,可以更方便地处理多维数组。
1. Array.prototype.flat
flat
方法可以将嵌套的多维数组扁平化为一维数组。该方法默认会扁平化所有子数组。
let arr = [1, 2, [3, 4]]; let flatArr = arr.flat(); // [1, 2, 3, 4]
我们还可以传入一个可选参数depth
,指定要扁平化的子数组的最大嵌套层数。如果depth
小于等于0,则不进行扁平化。
let arr = [1, 2, [3, [4]]]; let flatArr = arr.flat(1); // [1, 2, 3, [4]]
需要注意的是,flat
方法会进行浅拷贝,如果原数组中的子数组是对象或数组等引用类型,扁平化后的新数组和原数组中的子数组将指向同一个内存地址。
let arr = [1, 2, {a: 3}, [4]]; let flatArr = arr.flat(); flatArr[2].a = 5; console.log(arr); // [1, 2, {a: 5}, [4]]
因此,在需要进行修改操作的情况下,我们需要注意这一点。
2. Array.prototype.flatMap
flatMap
方法在扁平化的基础上,还可以对每个元素进行映射并返回一个新数组。
let arr = [1, 2, 3]; let flatMapArr = arr.flatMap(item => [item, item * 2]); // [1, 2, 2, 4, 3, 6]
flatMap
方法会对每个元素调用回调函数,并将回调函数的返回值(必须为数组类型)扁平化后组成新的数组。
和map
方法不同的是,flatMap
方法会自动扁平化回调函数的返回值,因此我们无需手动调用flat
方法。
flatMap
方法同样进行浅拷贝,需要注意对引用类型的处理。
结论
flat
和flatMap
方法非常实用,可以更方便地处理多维数组,提高开发效率。但需要注意浅拷贝的特性,避免因为引用类型的操作导致数据混乱。同时,我们可以将这些方法运用到实际开发中,提高开发效率,优化代码质量。
参考示例
-- -------------------- ---- ------- -- -------- --- --- - --- -- --- ------ --- ------ - ------------ -- --- -- --- ----- --- ------ - ------------ -- --- -- -- ---- --- ------ - ------------ -- --- -- -- -- ----------------- -- --- -- --- ----- -------------------- -------------------- -------------------- -- ----------- --- ---- - --- -- --- --- ---------- - ----------------- -- ------ ---- - ---- ------------------------ -- --- -- -- -- -- --
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674d1b31a336082f2548d0c6