1. 疑惑类
1.1在处理数据的时候,这个操作我看不明白这个意思
解决:
1.1.1. 初始化 swipeGroup
const swipeGroup = {}
这行代码创建了一个空对象 swipeGroup
,它将用于存储分类后的数据。最终这个对象的每个属性名是 enumPictureCategory
的值,而每个属性对应的值是一个数组,数组里存储的是属于该分类的数据项。
1.1.2. 初始化每个分类的数组
for (const item of props.swipeData) {
swipeGroup[item.enumPictureCategory] = []
}
这里使用 for...of
循环遍历 props.swipeData
数组中的每个 item
。item
代表数据项,而 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
对象,它包含了多个字段(例如enumPictureCategory
、name
、description
等)。- 这些
item
会根据enumPictureCategory
被分类存储到不同的数组里,形成一个按分类组织的数据结构。
所以,valueArray
里存储的每个值,都是 props.swipeData
中的一个数据项对象,这些数据项根据 enumPictureCategory
被分配到不同的数组中。
2. 小技巧,思想类
2.1 对复杂数据类型的数据处理
(根据housePics
里面的 enumPictureCategory
数字类别进行分类) 根据后端数据的特点,展示前端内容
- 根据类型,创建数组
- 赋值
具体操作步骤
方法一:
注意:这个对象里面的[]
这个语法的意思是对象里面的属性的意思
方法二:
if (!valueArray) { valueArray = [] swipeGroup[item.enumPictureCategory] = valueArray }
这段代码的作用是确保在 swipeGroup
对象中,每个 item.enumPictureCategory
对应的值是一个数组。如果该值尚不存在(即 valueArray
为 undefined
或 null
),就初始化为一个空数组,并将这个空数组赋值给 swipeGroup[item.enumPictureCategory]
。然后再将当前的 item
添加到这个数组中。
3. 知识点类
3.1 作用域插槽,具名插槽
- 3.1.1 在 作用域插槽 里面,
#
代表v-slot
,后面直接可以加插槽名
#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>