数组平铺-所有平铺-根据深度平铺

本文详细介绍了JavaScript中将多维数组转换为一维数组的五种方法:包括使用ES6的`flat()`方法,结合`toString()`、`join()`、`split()`和`map()`,正则替换,递归循环以及`reduce()`。每种方法都有其独特之处,适用于不同的场景需求,为开发者提供了灵活的选择。

所有平铺

使用es6的falt

let newarr = arr.flat(1);
console.log(newarr);

使用toString()或者join()

var str = arr
  .join(',')
  .split(',')
  .map((item) => {
    return parseFloat(item);
  });

正则替换

let str = JSON.stringify(arr).replace(/\[|\]/g, '');
let newarr = JSON.parse(`[${str}]`);
console.log(newarr);

循环+concat+push

function flat(newarr) {
  let result = [];
  for (let i = 0; i < newarr.length; i++) {
    if (Array.isArray(newarr[i])) {
      result = result.concat(flat(newarr[i]));
    } else {
      result.push(newarr[i]);
    }
  }
  return result;
}

根据深度平铺

循环+concat+push

function flat(newarr = [], depth = 1) {
  let result = [];
  (function flattend(arr, depth) {
    arr.forEach(function (item) {
      if (Array.isArray(item) && depth > 0) {
        flattend(item, depth - 1);
      } else {
        result.push(item);
      }
    });
  })(newarr, depth);
  return result;
}

reduce

function flat(arr, depth = 1) {
  if (depth <= 0) {
    return arr;
  }
  //   return arr.reduce((pre, acc) => {
  //     if (Array.isArray(acc)) {
  //       return pre.concat(flat(acc, depth - 1));
  //     } else {
  //       return pre.concat(acc);
  //     }
  //   }, []);
  return arr.reduce(
    (pre, acc) => pre.concat(Array.isArray(acc) ? flat(acc, depth - 1) : acc),
    []
  );
}

其他方法(仅供参考)

// var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];
// function flatten(arr) {
//   const stack = [...arr];
//   const res = [];
//   while (stack.length) {
//     // 使用 pop 从 stack 中取出并移除值
//     const next = stack.pop();
//     if (Array.isArray(next)) {
//       // 使用 push 送回内层数组中的元素,不会改动原始输入
//       stack.push(...next);
//       console.log('1', stack);
//     } else {
//       res.push(next);
//       console.log('2', stack);
//     }
//   }
//   // 反转恢复原数组的顺序
//   return res.reverse();
// }
// flatten(arr1); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
// const arr = [1, [[2]], 3];
// function flatten(arr) {
//   while (arr.some((item) => Array.isArray(item))) {
//     console.log(...arr);
//     arr = [].concat(...arr);
//     console.log(arr);
//   }
//   return arr;
// }
// console.log(flatten(arr));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值