用生命谱写代码的赞歌

0%

数组高级用法举例-升维与降维

应用举例-数组格式化

需求:有下面一组数据

1
2
3
4
5
6
let arr = [
['客服小艾', '跟进任务', '114'],
['客服小艾', '助理任务', '13'],
['杨朝', '助理任务', '32'],
['欣客服', '跟进任务', '4']
]

每个客服人员必须拥有两种任务(跟进任务与助理任务),如果该客服人员缺少其中某项任务,则将其另一项任务补全,任务数设置为0,即将上面的数组转化为下面数组

1
2
3
4
5
6
7
8
[
["客服小艾", "跟进任务", "114"],
["客服小艾", "助理任务", "13"],
["杨朝", "助理任务", "32"],
["欣客服", "跟进任务", "4"],
["杨朝", "跟进任务", "0"],
["欣客服", "助理任务", "0"]
]

综合使用 reduce 和 filter 函数

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>数组格式化</title>
</head>

<body>
<script>
/* // 将二维数组转化为一维数组
function downDimension(arr) {
var newArr = arr.reduce(function(a, b) {
return a.concat(b)
}, [])
return newArr
} */
/* // 取出一维数组中的客服名字组成新数组
function composeNameArr(arr) {
var newArr = arr.filter(function(item, index) {
if (index % 3 === 0) {
return item
}
})
return newArr
} */
/* // 计算同一个客服名字的个数
function counteName(arr) {
var countItem = nameArr.reduce(function(allItems, item) {
if (item in allItems) {
allItems[item]++
} else {
allItems[item] = 1
}
return allItems
}, {})
return countItem
} */

let arr = [
['客服小艾', '跟进任务', '114'],
['客服小艾', '助理任务', '13'],
['杨朝', '助理任务', '32'],
['欣客服', '跟进任务', '4']
]
// 判断新增任务类别
function judgeTask(task) {
if (task === '跟进任务') {
return '助理任务'
}
return '跟进任务'
}
// 一维数组转化为二维数组
function upDimension(arr) {
var newArr = []
while (arr.length !== 0) {
newArr.push(arr.splice(0, 3))
}
return newArr
}

// 转化格式
function formatArr(arr) {
// 将二维数组转化为一维数组
var concatArr = arr.reduce(function (a, b) {
return a.concat(b)
}, [])
console.log(concatArr)

// 挑出客服名字组成数组
var nameArr = concatArr.filter(function (item, index) {
if (index % 3 === 0) {
return item
}
})
console.log(nameArr)

// 判断同一个客服名字出现几次
var countItem = nameArr.reduce(function (allItems, item) {
if (item in allItems) {
allItems[item]++
} else {
allItems[item] = 1
}
return allItems
}, {})

// 名字次数为1的需要添加任务
for (let key in countItem) {
if (countItem[key] === 1) {
var index = concatArr.indexOf(key)
var task = concatArr[index + 1]
var newTask = judgeTask(task)
concatArr = concatArr.concat([key, newTask, '0'])
}
}

var resultArr = upDimension(concatArr)
return resultArr
}

console.log(formatArr(arr))
</script>
</body>

</html>