• uni-app:对数组对象进行以具体某一项的分类处理


     一、原始数据

    这里定义为五个数组,种类product有aaa,bbb两种

    原始数据在data中进行定义

    1. res: {
    2. "success": true,
    3. "devices": [{
    4. no: 0,
    5. product: 'aaa',
    6. alias: "设备1",
    7. assign: [
    8. ["a1", "a2", "a3"],
    9. ["a11", "a22", "a33"],
    10. ["a111", "a222", "a333"]
    11. ]
    12. },
    13. {
    14. no: 1,
    15. product: 'bbb',
    16. alias: "设备2",
    17. assign: [
    18. ["b1", "b2", "b3"],
    19. ["b11", "b22", "b33"],
    20. ["b111", "b222", "b333"],
    21. ["b1111", "b2222", "b3333"]
    22. ]
    23. },
    24. {
    25. no: 2,
    26. product: 'aaa',
    27. alias: "设备3",
    28. assign: [
    29. ["a1", "a2", "a3"],
    30. ["a111", "a222", "a333"],
    31. ["a11", "b22", "c33"]
    32. ]
    33. },
    34. {
    35. no: 3,
    36. product: 'aaa',
    37. alias: "设备4",
    38. assign: [
    39. ["a11", "b22", "c33"],
    40. ["a1", "a2", "a3"],
    41. ["a111", "a222", "a333"]
    42. ]
    43. },
    44. {
    45. no: 4,
    46. product: 'bbb',
    47. alias: "设备5",
    48. assign: [
    49. ["b111", "b222", "b333"],
    50. ["b1", "b2", "b3"],
    51. ["b11", "b22", "b33"],
    52. ["b1111", "b2222", "b3333"]
    53. ]
    54. },
    55. ]
    56. },

    二、分类处理数据

    注:使用了数组的 reduce() 方法来对 devices 数组进行循环遍历,并根据每个设备对象中的 product 值将其分类到一个以 product 为名称的数组中。

    • reduce() 方法接收一个回调函数和一个初始值作为参数。在这里,初始值是一个空对象 {}

    • 回调函数有两个参数:累加器(acc)和当前迭代的元素(device)。

    • 在每次迭代中,获取当前设备对象的 product 值并保存在变量 product 中。

    • 接下来,通过检查累加器对象 acc 中是否存在以 product 值为名称的属性,来判断是否已经有与该 product 对应的数组。

    • 如果不存在,则创建一个新的空数组,并将其添加为累加器对象 acc 的属性之一,使用 product 值作为属性名。

    • 然后,将当前的设备对象 device 添加到对应的 product 数组中,使用 push() 方法将设备对象推入数组中。

    • 最后,在每次迭代结束时,返回累加器对象 acc,以便在下一次迭代中使用。

    • 当所有元素都被迭代完毕后,reduce() 方法将返回最终累加器对象 acc,其中包含了以 product 值为名称的数组。

    1. //根据product的名称进行分类处理
    2. const devices = this.res.devices;
    3. const result = devices.reduce((acc, device) => {
    4. const product = device.product;
    5. // 检查结果中是否已存在相同 product 的数组,如果不存在则创建一个新数组
    6. if (!acc[product]) {
    7. acc[product] = [];
    8. }
    9. // 将当前设备对象添加到对应的 product 数组中
    10. acc[product].push(device);
    11. return acc;
    12. }, {});

     

    三、完整代码

    1. <template>
    2. <view>
    3. view>
    4. template>
    5. <script>
    6. export default {
    7. data() {
    8. return {
    9. res: {
    10. "success": true,
    11. "devices": [{
    12. no: 0,
    13. product: 'aaa',
    14. alias: "设备1",
    15. assign: [
    16. ["a1", "a2", "a3"],
    17. ["a11", "a22", "a33"],
    18. ["a111", "a222", "a333"]
    19. ]
    20. },
    21. {
    22. no: 1,
    23. product: 'bbb',
    24. alias: "设备2",
    25. assign: [
    26. ["b1", "b2", "b3"],
    27. ["b11", "b22", "b33"],
    28. ["b111", "b222", "b333"],
    29. ["b1111", "b2222", "b3333"]
    30. ]
    31. },
    32. {
    33. no: 2,
    34. product: 'aaa',
    35. alias: "设备3",
    36. assign: [
    37. ["a1", "a2", "a3"],
    38. ["a111", "a222", "a333"],
    39. ["a11", "b22", "c33"]
    40. ]
    41. },
    42. {
    43. no: 3,
    44. product: 'aaa',
    45. alias: "设备4",
    46. assign: [
    47. ["a11", "b22", "c33"],
    48. ["a1", "a2", "a3"],
    49. ["a111", "a222", "a333"]
    50. ]
    51. },
    52. {
    53. no: 4,
    54. product: 'bbb',
    55. alias: "设备5",
    56. assign: [
    57. ["b111", "b222", "b333"],
    58. ["b1", "b2", "b3"],
    59. ["b11", "b22", "b33"],
    60. ["b1111", "b2222", "b3333"]
    61. ]
    62. },
    63. ]
    64. },
    65. }
    66. },
    67. methods: {
    68. },
    69. onLoad() {
    70. console.log('初始数据')
    71. console.log(this.res.devices)
    72. //根据product的名称进行分类处理
    73. const devices = this.res.devices;
    74. const result = devices.reduce((acc, device) => {
    75. const product = device.product;
    76. // 检查结果中是否已存在相同 product 的数组,如果不存在则创建一个新数组
    77. if (!acc[product]) {
    78. acc[product] = [];
    79. }
    80. // 将当前设备对象添加到对应的 product 数组中
    81. acc[product].push(device);
    82. return acc;
    83. }, {});
    84. console.log('分类后的数据')
    85. console.log(result);
    86. }
    87. };
    88. script>
    89. <style>
    90. style>

  • 相关阅读:
    ElasticSearch(三)
    2022-07-01 多线程互斥锁的一个案例
    【LeetCode】71. 简化路径
    三个月内,英特尔CEO又现身成都,带来四个关键词!
    Javaweb第5次上机练习(获取HTTP的请求参数)
    渲染器——快速Diff算法
    第十三周课堂笔记(第六章内容)类与对象
    基于百度、高德路线规划的出行圈获取
    【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路
    对象模型和this指针(个人学习笔记黑马学习)
  • 原文地址:https://blog.csdn.net/weixin_46001736/article/details/133888834