• JavaScrpit数组拍平


    1.数组拍平

    1. flat()

    arr.flat(Infinity)

    2. toString()

    arr.toString().split(',').map((item) => Number(item));

    3. 递归+reduce

    arr.reduce((total, item) => (Array.isArray(item) ? [...total, ...flat(item)] : [...total, item]),[],);

    2.树结构转数组(递归)

    1. //数据
    2. const treeData = [
    3. {
    4. title: '0-0',
    5. key: '0-0',
    6. children: [
    7. {
    8. title: '0-0-0',
    9. key: '0-0-0',
    10. children: [
    11. { title: '0-0-0-0', key: '0-0-0-0' },
    12. { title: '0-0-0-1', key: '0-0-0-1' },
    13. { title: '0-0-0-2', key: '0-0-0-2' },
    14. ],
    15. },
    16. {
    17. title: '0-0-1',
    18. key: '0-0-1',
    19. children: [
    20. { title: '0-0-1-0', key: '0-0-1-0' },
    21. { title: '0-0-1-1', key: '0-0-1-1' },
    22. { title: '0-0-1-2', key: '0-0-1-2' },
    23. ],
    24. },
    25. {
    26. title: '0-0-2',
    27. key: '0-0-2',
    28. },
    29. ],
    30. },
    31. {
    32. title: '0-1',
    33. key: '0-1',
    34. children: [
    35. { title: '0-1-0-0', key: '0-1-0-0' },
    36. { title: '0-1-0-1', key: '0-1-0-1' },
    37. { title: '0-1-0-2', key: '0-1-0-2' },
    38. ],
    39. },
    40. {
    41. title: '0-2',
    42. key: '0-2',
    43. },
    44. ];
    45. //方法函数
    46. const treeToArray = (tree) => {
    47. const result = [];//1.声明result保存转化后的数组
    48. tree.forEach((item) => {
    49. result.push({ ...item, children: null });//2.把第一层数组元素push到result中
    50. item.children && result.concat(treeToArray(item.children));//3.如果存在子元素,就开始递归、拼接数组
    51. });
    52. return result;
    53. };
    54. //输出返回值
    55. console.log(treeToArray(treeData));

    3.数组转树结构(利用引用类型的特性)

    1. //数据
    2. const ArrayData = [
    3. { title: '0-0', key: '0-0', parentKey: '' },
    4. { title: '0-1', key: '0-1', parentKey: '' },
    5. { title: '0-2', key: '0-2', parentKey: '' },
    6. { title: '0-0-0', key: '0-0-0', parentKey: '0-0' },
    7. { title: '0-0-1', key: '0-0-1', parentKey: '0-0' },
    8. { title: '0-0-2', key: '0-0-2', parentKey: '0-0' },
    9. { title: '0-1-0-0', key: '0-1-0-0', parentKey: '0-1' },
    10. { title: '0-1-0-1', key: '0-1-0-1', parentKey: '0-1' },
    11. { title: '0-1-0-2', key: '0-1-0-2', parentKey: '0-1' },
    12. { title: '0-0-0-0', key: '0-0-0-0', parentKey: '0-0-0' },
    13. { title: '0-0-0-1', key: '0-0-0-1', parentKey: '0-0-0' },
    14. { title: '0-0-0-2', key: '0-0-0-2', parentKey: '0-0-0' },
    15. { title: '0-0-1-0', key: '0-0-1-0', parentKey: '0-0-1' },
    16. { title: '0-0-1-1', key: '0-0-1-1', parentKey: '0-0-1' },
    17. { title: '0-0-1-2', key: '0-0-1-2', parentKey: '0-0-1' },
    18. ];
    19. //方法
    20. const arrayToTree = (tree: any[]) => {
    21. let result = []; //返回的树结构
    22. let treeMap = {}; //用传进来的每个项的id作为键值,建立一棵树
    23. tree.forEach((item) => {
    24. item.children = [];
    25. treeMap[item.key] = item; //浅拷贝,共享引用
    26. });
    27. tree.forEach((item) => {
    28. if (item.parentKey === '') {
    29. result.push(item);
    30. } else {
    31. treeMap[item.parentKey].children.push(item);//修改treeMap的值,result中的值也会随之变化。因为他们复制的是tree的地址(引用类型)。
    32. }
    33. });
    34. return result; // result 转化后的树形结构数据
    35. };
    36. //输出
    37. console.log(arrayToTree(ArrayData));

  • 相关阅读:
    算法通关村第十关黄金挑战——归并排序详解
    UE4 使用材质后期 制作玻璃有雨效果
    计算结构体大小:内存对齐详解
    ASP .NET Core API(swaggerUI)实例demo下载、发布与部署(各种遇到的坑、解决方法)
    C++加持让python程序插上翅膀——利用pybind11进行c++和python联合编程示例
    搞定企业视频直播:硬件设备、直播网络环境和设备连接说明
    Mxnet框架使用
    Day15: C++之STL容器(3/3)
    Tomcat之startup.bat启动闪退解决
    pycharm 快捷键 及 高级设置
  • 原文地址:https://blog.csdn.net/m0_67011584/article/details/138211052