我是靠谱客的博主 重要高山,最近开发中收集的这篇文章主要介绍扁平化数组:多维数组转化为一维数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

扁平化数组:多维数组转化为一维数组

文章目录

    • 扁平化数组:多维数组转化为一维数组
      • 方法一:递归实现
      • 方法二:reduce函数
      • 方法三:扩展运算符
      • 方法四:split&toString
      • 方法五(推荐):传入参数,决定扁平阶数

方法一:递归实现

const a = [1, [2, [3, [4, 5]]]];
const flatten = (arr) => {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
//concat方法进行拼接
result = result.concat(flatten(arr[i]));
// console.log(result)
} else {
result.push(arr[i]);
}
}
return result;
};

方法二:reduce函数

const flatten1 = (arr) => {
return arr.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? flatten(next) : next);
}, []);
};

方法三:扩展运算符

const flatten2 = (arr) => {
//some方法把数组中仍然是组数的项过滤出来
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr);
console.log(arr);
}
return arr;
};
console.log(flatten2(a));

方法四:split&toString

const flatten3 = (arr) => {
return arr.toString().split(",");
};
//
console.log(flatten3(a));

方法五(推荐):传入参数,决定扁平阶数

Array.prototype._flat = function (n) {
let result = [];
let num = n;
for (let item of this) {
// 如果是数组
if (Array.isArray(item)) {
n--;
//
没有扁平化的空间 直接推入
if (n < 0) {
result.push(item);
}
// 继续扁平化 并将n传入 决定item这一个数组中的扁平化
else {
result.push(...item._flat(n));
}
}
// 不是数组直接推入
else {
result.push(item);
}
// 每次循环 重置n 为传入的参数 因为每一项都需要扁平化 需要进行判断
n = num;
}
return result;
};
let arr = [1, 2, [3, 4], [5, 6, [7, 8]]];
let res = arr._flat(1);
console.log(res); // [ 1, 2, 3, 4, 5, 6, [ 7, 8 ] ]

这段时间将不断更新–》手撕js系列,如果对你有帮助帮小编,点个赞,加个关注哈。

最后

以上就是重要高山为你收集整理的扁平化数组:多维数组转化为一维数组的全部内容,希望文章能够帮你解决扁平化数组:多维数组转化为一维数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部