数据归类
# 数据归类技术
关联表
- 用户表
id | name | sex |
---|---|---|
1 | 小明 | 1 |
2 | 小黄 | 1 |
3 | 小红 | 2 |
4 | 小绿 | 2 |
- 性别表
id | sex |
---|---|
1 | 男 |
2 | 女 |
var users = [
{id: 1, name: '小明', sex: 1},
{id: 2, name: '小黄', sex: 1},
{id: 3, name: '小红', sex: 2},
{id: 4, name: '小绿', sex: 3}
]
var sex = [
{id: 1, sex: '男'},
{id: 2, sex: '女'}
]
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 单一归类
// {
// 1: [
// {id: 1, name: '小明', sex: 1},
// {id: 2, name: '小黄', sex: 1},
// ],
// 2: [
// {id: 3, name: '小红', sex: 2},
// {id: 4, name: '小绿', sex: 3}
// ]
// }
var cache = {}
sex.forEach(function (sex) {
var _id = sex.id;
cache[_id] = []
users.forEach(function(user) {
var _sex = user.sex;
if (_sex == _id) {
cache[_id].push(user)
}
})
})
console.log(cache)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 复合归类
id | name |
---|---|
1 | 足球 |
2 | 篮球 |
name | hobby |
---|---|
小明 | 1,2 |
小花 | 2 |
var hobby = [
{id:1, name: '足球'},
{id:2, name: '篮球'},
{id:3, name: '排球'},
{id:4, name: '乒乓球'},
{id:5, name: '保龄球'},
{id:6, name: '高尔夫球'},
]
var person = [
{name: '小明', hobby: '1,2'},
{name: '小明', hobby: '1,3'},
{name: '小明', hobby: '2,5'},
{name: '小明', hobby: '5,6'},
{name: '小明', hobby: '3,5'},
{name: '小明', hobby: '1,2,6'},
{name: '小明', hobby: '3,6'},
{name: '小明', hobby: '1,4,5,6'},
]
var cache = {
1: [{name: '小明', hobby: '1,2'},{name: '小明', hobby: '1,2,6'},{name: '小明', hobby: '1,4,5,6'}],
2: [{name: '小明', hobby: '1,2'},{name: '小明', hobby: '2,5'},{name: '小明', hobby: '1,2,6'}],
3: [{name: '小明', hobby: '1,3'},{name: '小明', hobby: '3,5'},{name: '小明', hobby: '3,6'}]
...
}
hobby.forEach(function(hobby) {
var _id = hobby.id;
cache[_id] = [];
person.forEach(function(person) {
var _hobbyArr = person.hobby.split(',');
_hobbyArr.forEach(function(elem) {
if (elem ++ _id) {
cache[_id].push(person)
}
})
})
})
console.log(cache)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function sortDatas(sort, data) {
var cache = {};
// foreign_key 关联字段
return function(foreign_key, sortType) {
if(sortType !== 'single' && sortType !== 'multi') {
throw new Error('Invalid sort type,[Only "single" and "multi" are valid values')
}
sort.forEach(function(sort) {
var _id = sort.id;
cache[_id] = []
data.forEach(function(elem) {
var foreign_val = elem[foreign_key]
switch(sortType) {
case 'single':
if (foreign_val == _id) {
cache[_id].push(elem)
}
break;
case 'multi':
var _arr = foreign_val.split(',')
_arr.forEach(function(val) {
if (val === _id) {
cache[_id].push(elem)
}
})
break;
default:
break;
}
})
return cache;
})
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
上次更新: 2021/04/04, 16:28:40