如何将 result 转换为 newResult 的数据结构, 根据 groupQuestionId的相同, 来添加index, 作为序号
```javascript
let result = [
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15615},
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15615},
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15615},
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15616},
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15617}
]
let newResult = [
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15615, index: '1-1'},
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15615, index: '1-2'},
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15615, index: '1-3'},
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15616, index: '2'},
{avgScore: null,createTime: "2022-05-20 13:59:05",createUserId: 61622,groupQuestionId: 15617, index: '3'}
]
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 如何将 result 转换为 newResult 的数据结构
let result = [
{ avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15615 },
{ avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15615 },
{ avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15615 },
{ avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15616 },
{ avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15617 }
]
let new_arr = [], newResult = [];
result.forEach((item, index) => {
if (Array.isArray(new_arr) && new_arr.length > 0) {
let new_idnex = new_arr.findIndex(zitem => zitem.some(sitem => sitem.groupQuestionId == item.groupQuestionId))
if (new_idnex != -1) {
new_arr[new_idnex].push(item)
} else {
new_arr.push([item])
}
} else {
new_arr.push([item])
}
})
new_arr.forEach((item, index) => {
if (Array.isArray(item) && item.length > 0) {
item.forEach((zitem, zindex, itemarr) => {
if (itemarr.length > 1) {
zitem.index = (index + 1) + '-' + (zindex + 1)
newResult.push(zitem)
} else {
zitem.index = (index + 1) + ''
newResult.push(zitem)
}
})
}
})
console.log(JSON.stringify(newResult, null, 2))
// let newResult = [
// { avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15615, index: '1-1' },
// { avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15615, index: '1-2' },
// { avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15615, index: '1-3' },
// { avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15616, index: '2' },
// { avgScore: null, createTime: "2022-05-20 13:59:05", createUserId: 61622, groupQuestionId: 15617, index: '3' }
// ]
</script>
</body>
</html>
虽然回答已采纳哈哈,但是还是来试试
贴下代码,使用hashmap做记录,时间复杂度O(n),空间复杂度O(n)
// let result这块就不贴上来了
let map = new Map();
let newResult = result.map((tem, index) => {
let idx = {};
if (map.has(tem.groupQuestionId)) { // 判断该id是否已经存在
const getCurrent = map.get(tem.groupQuestionId);
getCurrent.i2 += 1;
idx = getCurrent;
tem.index = `${idx.i1} - ${idx.i2}`;
if (idx.first >= 0) { // cover:id数不止1个
result[idx.first].index = `${idx.i1} - 1`;
delete idx.first
}
} else {
idx = {
i1: map.size + 1,
i2: 1,
first: index
}; // 不存在则拿出map的长度作为index
tem.index = `${idx.i1}`;
}
map.set(tem.groupQuestionId, idx)
return tem;
})
对比@web修理工 代码的效率在50000条数据下快了大概38倍~