数组的扁平化处理
解法一:使用递归的方式进行数组的扁平化处理
let arr = [1, 1, 2, 3, 4, 5, 6, [1, 2, 3, 4, 5, 6, [1233, [10, [10]]]]];
const arrayDeepFlattenCallBack = arr => {
if (!Array.isArray(arr)) "接收数组!";
return [].concat(...arr.map(v => Array.isArray(v) ? arrayDeepFlattenCallBack(v) : v));
}
arrayDeepFlattenCallBack();
// [ 1, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1233, 10, 10 ] 通过使用[].concat()方法进行数组的合并操作,使用Array.isArray()方法进行是否为数组的判断,使用展开运算符(...)进行数组的展开操作,使用递归调用方式进行数组的扁平化处理
解法二:使用toString的方式进行扁平化的处理
let arr = [1, 1, 2, 3, 4, 5, 6, [1, 2, 3, 4, 5, 6, [1233, [10, [10]]]]];
const arrayDeepFlattenToString = arr => {
return arr.toString().split(',').map(v => (v - 0));
}
arrayDeepFlattenToString(arr);
// [ 1, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1233, 10, 10 ] 该方法主要使用了toString的特性,将数组的元素全部转化成一段字符串,然后使用String.split方法将字符串以特定的分隔符转化成我们需要的数组,通过使用Array.map将新数组进行历遍
在上述方法中我们也可以将toString方法改变成join方法进行使用,得到的效果是相同的
解法三:通过使用Array.reduce方法进行数组的扁平化处理
该方法总体与递归调用的方式相似,我们这边主要利用的是reduce放的首个蚕食是可以进行自定义设置的特性
Last updated
Was this helpful?