一,数组扁平化:
将多层数组转换为一层数组,例子如下所示:
// 将多层数组testArr转换为一层数组
const testArr = [1,2,[3,4,[5,6,[7],8],9],10];
// 第一种方法:
function hanlderFun1(arr) {
const newArr = [];
arr.forEach(item => {
if (Array.isArray(item)) {
newArr.push(...hanlderFun1(item));
} else {
newArr.push(item);
}
})
return newArr;
}
// 第二种方法:
function hanlderFun2(arr) {
return arr.reduce((pre, cur, index, array) => pre.concat(Array.isArray(cur) ? hanlderFun2(cur) : cur), []);
}
// 测试
console.log(hanlderFun1(testArr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(hanlderFun2(testArr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
截图如下所示:
对象扁平化
将多层对象转换为一层对象,例子如下所示:
// 将多层对象testObj转换为一层对象
const testObj = {a: 1, b: {c: 2, d: {e: 3, f: {g: 4}, h: 5}, i: 6}, j: 7};
function getObj(obj) {
const newObj = {};
hanldeObj(obj, newObj);
return newObj;
}
function hanldeObj(obj, newObj) {
for(const key in obj) {
if (obj[key] && typeof obj[key] === 'object') {
hanldeObj(obj[key], newObj);
} else {
newObj[key] = obj[key];
}
}
}
// 测试
console.log(getObj(testObj)); // {a: 1, c: 2, e: 3, g: 4, h: 5, i: 6, j: 7}
截图如下所示: