扁平化处理是指将一个多维数组转换为一个一维数组
使用flat()
var arr = [1, 2, [3, 4],
[5, 6, 7, [8, 9, 10]], 11
]
var newArr = arr.flat(Infinity);
// console.log(newArr);
使用正则表达式
const res3 = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']');
console.log(res3)
// console.log(newArr);
使用reduce()
const flatten = arr => {
return arr.reduce(
(pre, cur) => {
return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
}, [])
}
const res4 = flatten(arr);
console.log(res4)
递归
const res5 = [];
const fn = arr => {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
fn(arr[i]);
} else {
res5.push(arr[i]);
}
}
}
fn(arr);
console.log(res5)
// console.log(newArr);
对象扁平化处理
var obj = {
a: [1, 2],
b: 2,
c: {
c: 3,
d: 4,
e: {
e: 5,
f: 6
}
}
}
function objFun(obj) {
var res = {} //定义一个对象,用来存储结果
function isObj(obj) { //定义一个函数,用来对obj进行遍历
for (var key in obj) {
if (Object.prototype.toString.call(obj[key]) == '[object Object]') { //如果值为对象,则进行递归
isObj(obj[key]);
} else { //不为对象则将值添加给res
res[key] = obj[key]
}
}
}
isObj(obj) //调用函数
return res //返回结果
}
console.log(objFun(obj)); // { a: [ 1, 2 ], b: 2, c: 3, d: 4, e: 5, f: 6 }
// console.log(newArr);
扩展运算符实现
let arr = [1, [2, [3, 4]]];
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
console.log(flatten(arr)); // [1, 2, 3, 4,5]
// console.log(newArr);
split 和 toString
let arr = [1, [2, [3, 4]]];
function flatten(arr) {
return arr.toString().split(',');
}
console.log(flatten(arr)); // [1, 2, 3, 4,5]