Javascript多维数组扁平化
下面是将多位数组转化为单一数组的三种不同方法。
对于此数组:
var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
我们需要的结果是:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
解决方案1:使用concat()
和apply()
var myNewArray = [].concat.apply([], myArray);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
解决方案2:使用reduce()
var myNewArray = myArray.reduce(function(prev, curr) {
return prev.concat(curr);
});
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
解决方案3:
var myNewArray3 = [];
for (var i = 0; i < myArray.length; ++i) {
for (var j = 0; j < myArray[i].length; ++j)
myNewArray3.push(myArray[i][j]);
}
console.log(myNewArray3);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
在这里看一下三种逻辑的实际作用。
方案四:使用 ES6 的展开运算符
var myNewArray4 = [].concat(...myArray);
console.log(myNewArray4);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
在这里 查看这四种方法
对于无限嵌套的数组请使用 Lodash 的 flattenDeep()。
如果你担心性能问题的话,这里 有一个测试让你确认他们是如何执行的。
对于较大的数组试一下Underscore的flatten().
如果你对性能好奇,这里有一个测试。
MEET THE NEW JSTIPS BOOK
You no longer need 10+ years of experience to get your dream job.
Use the 100 answers in this short book to boost your confidence and skills to ace the interviews at your favorite companies like Twitter, Google and Netflix.
GET THE BOOK NOW
MEET THE NEW JSTIPS BOOK
The book to ace the JavaScript Interview.
A short book with 100 answers designed to boost your knowledge and help you ace the technical interview within a few days.
GET THE BOOK NOW