多层数据扁平化

390 阅读1分钟

一,数组扁平化:

将多层数组转换为一层数组,例子如下所示:

// 将多层数组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}

截图如下所示: