blog
blog copied to clipboard
多维数组实现扁平化
方法一
var newArray = arr.flat(depth)
参数:
depth :可选:指定要提取嵌套数组的结构深度,默认值为 1;
使用 Infinity 作为深度,展开任意深度的嵌套数组;
返回值:
一个包含将数组与子数组中所有元素的新数组。
示例:
var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4]
var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // [1, 2, 3, 4, 5, 6]
//使用 Infinity 作为深度,展开任意深度的嵌套数组
arr3.flat(Infinity); // [1, 2, 3, 4, 5, 6]
注意:flat() 方法会移除数组中的空项
var arr4 = [1, 2, , 4, 5]; arr4.flat(); // [1, 2, 4, 5]
扩展:
已知如下数组:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个降序序且不重复的数组:
[...new Set(arr.flat(Infinity))].sort((a,b) => (b-a))
//输出: [14,13,12,11,10,9,8,7,6,5,4,3,2,1]
兼容性:
IE edge不支持
方法二
使用arr.toString()展开
// 使用arr.toString()展开数组
[...new Set(arr.toString().split(",").sort((a,b)=>(a-b)).map(Number))]
//输出 [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
兼容性:
所有的都支持