0
点赞
收藏
分享

微信扫一扫

JavaScript数组扁平化


数组扁平化就是将数组元素和子数组元素合并成新数组并且返回。

遍历递归

遍历数组,并且判断子元素是否是一个数组:

var a = [1, [54, [43, 42, 5]]];

function flatten(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
console.log(flatten(a)); //[ 1, 54, 43, 42, 5 ]

reduce

reduce本来是用来求和的,我们可以设置默认值为一个空数组,再通过concat方法来拼接数组元素:

function flatten(arr) {
return arr.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? flatten(next) : next);
}, [])
}
console.log(flatten(a))

…扩展运算符

function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}

toString和split

先将数组转化为string,再次分割为数组

function flatten(arr) {
return arr.toString().split(',')
}

ES6的flat

function flatten(arr) {
return arr.flat(Infinity)
}

通过正则和JSON

function flatten(arr) {
let str = JSON.stringify(arr);
str = str.replace(/(\[|\])/g, '');
str = '[' + str + ']';
return JSON.parse(str);
}

这几个方法都可实现数组扁平化。


举报

相关推荐

0 条评论