blog icon indicating copy to clipboard operation
blog copied to clipboard

多维数组实现扁平化

Open xianzou opened this issue 5 years ago • 0 comments

方法一

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]

兼容性:

所有的都支持

xianzou avatar Jul 15 '19 03:07 xianzou