前端大佬才能坚持的代码

3,099 阅读5分钟

1. 疑惑类

1.1在处理数据的时候,这个操作我看不明白这个意思

image.png

解决:

1.1.1. 初始化 swipeGroup

const swipeGroup = {}

这行代码创建了一个空对象 swipeGroup,它将用于存储分类后的数据。最终这个对象的每个属性名是 enumPictureCategory 的值,而每个属性对应的值是一个数组,数组里存储的是属于该分类的数据项。

1.1.2. 初始化每个分类的数组

for (const item of props.swipeData) {
    swipeGroup[item.enumPictureCategory] = []
}

这里使用 for...of 循环遍历 props.swipeData 数组中的每个 itemitem 代表数据项,而 item.enumPictureCategory 是该数据项的分类标识符。

  • 对于每个 item,代码会在 swipeGroup 对象中创建一个以 item.enumPictureCategory 为键名的属性,并且将它的值初始化为一个空数组。
  • 这样做的目的是为每个 enumPictureCategory 创建一个空数组,用来存储所有属于该分类的项目。

1.1.3. 将数据项按分类放入数组

for (const item of props.swipeData) {
    const valueArray = swipeGroup[item.enumPictureCategory]
    valueArray.push(item)
}

这部分代码再一次遍历 props.swipeData 数组中的每个 item。这时,已经有了 swipeGroup 对象,并且每个 enumPictureCategory 都有了一个空数组。

  • 对于每个 item,代码通过 item.enumPictureCategory 查找到对应的数组(即之前初始化的空数组)。
  • 然后,valueArray.push(item) 将当前 item 添加到该数组中。

通过这种方式,所有具有相同 enumPictureCategory 的项就会被分组到同一个数组中。

代码的目的和意义

有利于进行数据分组

最终的目标是将 props.swipeData 中的所有数据按 enumPictureCategory 分类。每个不同的 enumPictureCategory 值会作为 swipeGroup 对象的一个属性,属性值是一个数组,数组里包含所有属于该分类的项。

举个例子,假设 props.swipeData 里有以下数据:

[
    { enumPictureCategory: 'nature', name: 'Tree' },
    { enumPictureCategory: 'nature', name: 'River' },
    { enumPictureCategory: 'animals', name: 'Lion' },
    { enumPictureCategory: 'nature', name: 'Mountain' },
    { enumPictureCategory: 'animals', name: 'Elephant' }
]

执行这段代码后,swipeGroup 会变成如下结构:

{
    nature: [
        { enumPictureCategory: 'nature', name: 'Tree' },
        { enumPictureCategory: 'nature', name: 'River' },
        { enumPictureCategory: 'nature', name: 'Mountain' }
    ],
    animals: [
        { enumPictureCategory: 'animals', name: 'Lion' },
        { enumPictureCategory: 'animals', name: 'Elephant' }
    ]
}

其中,

在代码中的这一行:

const valueArray = swipeGroup[item.enumPictureCategory]

valueArray 代表的是 swipeGroup 中某个特定 enumPictureCategory 分类下的数组。它指向了一个数组,该数组是用来存储属于该分类的所有 item 的数据项。

a. valueArray 中的值是什么?

在这个上下文中,valueArray 中存储的值就是 props.swipeData 中每个 item 对应的整个数据项。也就是说,每个 item 是一个对象(包含了多个字段),而 valueArray 就是按 enumPictureCategory 分类后的所有 item 对象的集合。

b. 举个例子

假设 props.swipeData 里有以下数据:

[
    { enumPictureCategory: 'nature', name: 'Tree', description: 'A green tree' },
    { enumPictureCategory: 'nature', name: 'River', description: 'A flowing river' },
    { enumPictureCategory: 'animals', name: 'Lion', description: 'A wild animal' },
    { enumPictureCategory: 'nature', name: 'Mountain', description: 'A tall mountain' },
    { enumPictureCategory: 'animals', name: 'Elephant', description: 'A big animal' }
]

执行第一次循环时,会初始化 swipeGroup 对象,每个分类的值会是一个空数组:

swipeGroup = {
    nature: [],
    animals: []
}

接下来,执行第二次循环时,valueArray 就是 swipeGroup[item.enumPictureCategory] 中的数组,针对每个 item,它会被添加到相应的数组中:

  • 当处理到第一个 item{ enumPictureCategory: 'nature', name: 'Tree' })时:

    • valueArray 会指向 swipeGroup['nature'] 数组。

    • 该项会被添加到 nature 分类的数组中:

      javascript
      swipeGroup['nature'] = [    { enumPictureCategory: 'nature', name: 'Tree', description: 'A green tree' }]
      
  • 当处理到第二个 item{ enumPictureCategory: 'nature', name: 'River' })时:

    • valueArray 会继续指向 swipeGroup['nature'] 数组。

    • 该项会被添加到 nature 分类的数组中:

      swipeGroup['nature'] = [
          { enumPictureCategory: 'nature', name: 'Tree', description: 'A green tree' },
          { enumPictureCategory: 'nature', name: 'River', description: 'A flowing river' }
      ]
      
  • 当处理到第三个 item{ enumPictureCategory: 'animals', name: 'Lion' })时:

    • valueArray 会指向 swipeGroup['animals'] 数组。

    • 该项会被添加到 animals 分类的数组中:

      swipeGroup['animals'] = [
          { enumPictureCategory: 'animals', name: 'Lion', description: 'A wild animal' }
      ]
      
  • 以此类推,最终 swipeGroup 变成:

swipeGroup = {
    nature: [
        { enumPictureCategory: 'nature', name: 'Tree', description: 'A green tree' },
        { enumPictureCategory: 'nature', name: 'River', description: 'A flowing river' },
        { enumPictureCategory: 'nature', name: 'Mountain', description: 'A tall mountain' }
    ],
    animals: [
        { enumPictureCategory: 'animals', name: 'Lion', description: 'A wild animal' },
        { enumPictureCategory: 'animals', name: 'Elephant', description: 'A big animal' }
    ]
}

javascript

c. 总结

  • valueArray 是指向 swipeGroup 中某个分类(enumPictureCategory)对应的数组。
  • valueArray 中的值就是 props.swipeData 中每个 item 对象,它包含了多个字段(例如 enumPictureCategorynamedescription 等)。
  • 这些 item 会根据 enumPictureCategory 被分类存储到不同的数组里,形成一个按分类组织的数据结构。

所以,valueArray 里存储的每个值,都是 props.swipeData 中的一个数据项对象,这些数据项根据 enumPictureCategory 被分配到不同的数组中。

2. 小技巧,思想类

2.1 对复杂数据类型的数据处理 (根据housePics 里面的 enumPictureCategory数字类别进行分类) 根据后端数据的特点,展示前端内容

image.png

  • 根据类型,创建数组
  • 赋值

具体操作步骤

方法一:

image.png

注意:这个对象里面的[] 这个语法的意思是对象里面的属性的意思

方法二:

image.png

if (!valueArray) { valueArray = [] swipeGroup[item.enumPictureCategory] = valueArray }

这段代码的作用是确保在 swipeGroup 对象中,每个 item.enumPictureCategory 对应的值是一个数组。如果该值尚不存在(即 valueArrayundefinednull),就初始化为一个空数组,并将这个空数组赋值给 swipeGroup[item.enumPictureCategory]。然后再将当前的 item 添加到这个数组中。

3. 知识点类

3.1 作用域插槽,具名插槽

  • 3.1.1 在 作用域插槽 里面,# 代表 v-slot,后面直接可以加插槽名image.png

#indicator="{ active, total }" 的含义

这种语法的意思是,你在父组件中通过插槽访问子组件的 indicator 插槽,同时可以通过 { active, total } 获取子组件传递给该插槽的数据。

    • indicator 是子组件定义的一个具名插槽。
    • { active, total } 是子组件通过该插槽传递的数据对象。active 和 total 是子组件暴露给父组件的数据字段,父组件可以在插槽中使用这些数据。
<!--子组件的 具名插槽 indicator,传递 active 和 total -->
    <slot name="indicator" :active="active" :total="total"></slot>
<!--父组件中 **使用** #indicator 来获取子组件传递的数据 -->
      <template #indicator="{ active, total }">
        <p>当前进度: {{ active }} / {{ total }}</p>
      </template>
    • 在这个子组件中,indicator 插槽通过 slot 标签定义,并且它传递了 active 和 total 数据。这是通过 :active="active" :total="total" 的方式传递的。
    • 父组件可以通过这个插槽获取到 active 和 total 这两个值。
  • 3.1.2 具名插槽 一般用name变量,或者v-slot:name

    <slot name="header">默认头部内容</slot>
    

    或者

    <template v-slot:content>
        <p>这是自定义的内容部分。</p>
     </template>