JavaScript的flatten是一个非常有用的工具,它可以将一个多维数组压缩成一个一维数组。使用它可以简化代码,使程序更加易于理解和维护。在这篇文章中,我们将探讨JavaScript flatten的用法和常见的示例。
首先,让我们看一个最基本的用法,它将一个多维数组压缩成一个一维数组:
function flatten(arr) { return arr.reduce(function (flat, toFlatten) { return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten); }, []); } var myArray = [[1, 2, 3], [4, 5, [6, 7]], 8, 9]; console.log(flatten(myArray)); //输出[1, 2, 3, 4, 5, 6, 7, 8, 9]这里我们使用reduce函数来迭代数组,如果元素是一个数组,我们就递归调用flatten函数,将它压缩成一个一维数组。 flatten函数可以用于任何多维数组,比如这个三维数组:
var myArray = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]; console.log(flatten(myArray)); //输出[1, 2, 3, 4, 5, 6, 7, 8]这个四维数组:
var myArray = [[[[1, 2]], [[3, 4]], [[[5, [6, 7]]]]]]; console.log(flatten(myArray)); //输出[1, 2, 3, 4, 5, 6, 7]甚至可以用于数组中夹杂着对象的情况:
var myArray = [[1, {a:2,b:[3,4]}, [5, 6, {c:7}]], [8, 9]]; console.log(flatten(myArray)); //输出[1, {a:2,b:[3,4]}, 5, 6, {c:7}, 8, 9]在大多数情况下,我们只需要压缩数组的第一层,这可以通过添加一个可选参数depth来实现:
function flatten(arr, depth) { depth = depth || 1; return arr.reduce(function (flat, toFlatten) { return flat.concat(Array.isArray(toFlatten) && depth >1 ? flatten(toFlatten, depth - 1) : toFlatten); }, []); } var myArray = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]; console.log(flatten(myArray, 1)); //输出[[1, 2], [3, 4], [5, 6], [7, 8]] console.log(flatten(myArray, 2)); //输出[1, 2, 3, 4, 5, 6, 7, 8]当depth为1时,我们只需要返回数组中的元素本身而不是递归到它的下一层。当depth为2时,我们将返回一个完全压缩的一维数组,即将所有元素都压缩成一个数组。 除了使用递归算法,我们还可以使用ES6的flat方法:
var myArray = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]; console.log(myArray.flat(1)); //输出[[1, 2], [3, 4], [5, 6], [7, 8]] console.log(myArray.flat(2)); //输出[1, 2, 3, 4, 5, 6, 7, 8]这个方法与我们之前写的递归算法很相似,只是它使用了ES6的语法。 总之,flatten是一个非常有用的工具,它可以将任何多维数组压缩成一个一维数组。我们可以将它用于任何需要处理多维数组的情况,无论是递归算法还是ES6内置的flat方法。