首页 新闻 会员 周边 捐助

javascript处理数组去重时,结果老是有重复的,希望大神指点一下

0
悬赏园豆:100 [待解决问题]

项目详情数组 {项目名称、项目批次、项目批次是否变化、机构名称、线索编号、发现时间}
projectInfoList:[
{programName:测试项目1,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1,programNum:201109010011,findTime:2022-09-09},
{programName:测试项目1,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1,programNum:201109110013,findTime:2022-09-09},
{programName:测试项目1,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1,programNum:201109010014,findTime:2022-09-09},
{programName:测试项目2,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1,programNum:201109010015,findTime:2022-09-09},
{programName:测试项目2,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1,programNum:201109010016,findTime:2022-09-09},
{programName:测试项目3,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1,programNum:201109010012,findTime:2022-09-09},
{programName:测试项目3,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1,programNum:201109010017,findTime:2022-09-09},
{programName:测试项目3,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1,programNum:201109010018,findTime:2022-09-09}]

项目数组 {项目名称}
projectInfoList:[
{programName:测试项目1},
{programName:测试项目2},
{programName:测试项目3}]

项目批次数组 {项目名称、项目批次、是否发现变化、机构名称}
projectBatchList:[
{programName:测试项目1,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1},
{programName:测试项目1,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1},
{programName:测试项目2,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1},
{programName:测试项目2,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1},
{programName:测试项目3,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1},
{programName:测试项目3,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1}]

想要将上述项目详情数组进行去重,组成新数组:
1.从“项目详情数组”获取“项目数组”,希望组成新数组项目数组如下:

projectInfoList:[
{programName:测试项目1},
{programName:测试项目2},
{programName:测试项目3}]

2.从“项目详情数组”获取“项目批次数组”,希望组成新数组如下:
projectBatchList:[
{programName:测试项目1,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1},
{programName:测试项目1,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1},
{programName:测试项目2,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1},
{programName:测试项目2,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1},
{programName:测试项目3,projectBatch:项目批次1,isSXBH:1,organizationName:机构名称1},
{programName:测试项目3,projectBatch:项目批次2,isSXBH:1,organizationName:机构名称1}]

我的解答思路和尝试过的方法

1.从“项目详情数组”获取“项目批次数组”

for (var m = 0; m < projectInfoList.length; m++) {
for (var n = m + 1; n < projectInfoList.length; n++) {
if (projectInfoList[m].projectName == projectInfoList[n].projectName && projectInfoList[m].issueNumber == projectInfoList[n].issueNumber) {
console.log('测试22', projectInfoList[m], projectInfoList[n]);
projectInfoList.splice(n, 1);
}
}
}

function newArrFn (arr) {
let newArr = []
let map = new Map()
for(let i = 0;i<arr.length;i++){
// 如果 map里面不包含,就设置进去
if (!map.has(arr[i])) {
map.set(arr[i], true)
newArr.push(arr[i])
}
};
return newArr
}
newArrFn(projectInfoList);

最后新数组中数据是重复的

浪潮行舟的主页 浪潮行舟 | 初学一级 | 园豆:83
提问于:2022-09-12 18:32
< >
分享
所有回答(3)
0

上代码看看

Biuget-Golang | 园豆:784 (小虾三级) | 2022-09-13 11:13
0

项目详情集合:projectInfoList
项目集合:projectList
项目批次集合:projectBatchList

var newProjectList = projectList.map(i => ({
programName: i.programName,
proinfos: projectInfoList.filter(j => j.programName === i.programName)
}))
console.log('newProjectList ', newProjectList)

浪潮行舟 | 园豆:83 (初学一级) | 2022-09-13 14:33
0

            let hs={}
            let hs2={}
            for(let p of projectInfoList){
                hs[p.projectName]=true
                hs2[p.projectName+':'+p.projectBatch+':'+p.isSXBH+':'+p.organizationName]=true
            }
            let x=[]
            for(let n in hs){
                x.push({projectName:n})
            }
            let x2=[]
            for(let n in hs2){
                let s=n.split(':')
                x2.push({projectName:s[0],projectBatch:s[1],isSXBH:s[2],organizationName:s[3]})
            }
ensleep | 园豆:1682 (小虾三级) | 2022-09-13 17:18

没有测试,x是返回的项目信息。x2是返回的批次信息。他们分别以hs和hs2作为hash表,来去重。去重的时候,项目用projectName作为key,而批次使用批次的全部字段p.projectName+':'+p.projectBatch+':'+p.isSXBH+':'+p.organizationName
作为key,但是,批次的key从hs2里面取出来后,要用split拆分出这四个字段。

支持(0) 反对(0) ensleep | 园豆:1682 (小虾三级) | 2022-09-13 17:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册