JavaScript 记录重复数字

// 现有的数据格式 如下:

let proList = [
    {id:"11111111"},
    {id:"22222222"},
    {id:"22222222"},
    {id:"22222222"},
    {id:"33333333"},
    {id:"11111111"},
    {id:"11111111"},
    {id:"33333333"},
    {id:"11111111"},
    {id:"11111111"},
];

// 需要得到的数据如下:
1、mun:每个id数据重复的次数进行记录
2、去重、排序
let proList = [
    {id:"11111111",mun:'重复数据的数字'},
    {id:"22222222",mun:'重复数据的数字'},
    {id:"33333333",mun:'重复数据的数字'},
];
阅读 3.2k
4 个回答

这种用reduce最简单

function Reduce(list){
    const res = [];
    list.reduce((pre,cur,index)=>{
        const current = res.find(d=>d.id===cur.id);
        if(current){
            current['num']++;
        }else{
            res.push({
                id:cur.id,
                num:1
            })
        }
    },list[0])
    return res;
}

console.log(Reduce(proList))

clipboard.png

let proList = [
    { id: "11111111" },
    { id: "22222222" },
    { id: "22222222" },
    { id: "22222222" },
    { id: "33333333" },
    { id: "11111111" },
    { id: "11111111" },
    { id: "33333333" },
    { id: "11111111" },
    { id: "11111111" },
];

function purifyProList(proList){
    let res = [];
    let ids = proList.map(item => item.id).sort((item1, item2) => {
        return parseInt(item1) - parseInt(item2);
    });
    ids.forEach((item , index, arr) => {
        if(index===0 || arr[index-1] !== arr[index]){
            res.push({
                id: item,
                mun: 1
            });
        }else{
            res[res.length-1].mun++;
        }
    });
    return res;
}
console.log(purifyProList(proList));
 var arr  = [
            {id:"11111111"},
            {id:"22222222"},
            {id:"22222222"},
            {id:"22222222"},
            {id:"33333333"},
            {id:"11111111"},
            {id:"11111111"},
            {id:"33333333"},
            {id:"11111111"},
            {id:"11111111"},
        ];
        


var hash = {};
arr = arr.reduce(function(item, next) {
    if(hash[next.id]){
        item.map((e,i)=>{
            next.id == e.id ? item[i].sum++ :""
        })
    }else{
        next.sum = 1;
        hash[next.id] = true && item.push(next);
    }
    return item
}, [])
console.log(arr);

clipboard.png

谢谢各位大神的帮助,虽然我也写出来了,但是看你们的代码真的很优雅,我会逐行去敲一遍 谢谢!!

      let proList = [
            {id:"11111111"},
            {id:"22222222"},
            {id:"22222222"},
            {id:"22222222"},
            {id:"33333333"},
            {id:"11111111"},
            {id:"11111111"},
            {id:"33333333"},
            {id:"11111111"},
            {id:"11111111"}
        ];

        let results = (function(arr){
            let mun = 0;
            let len = arr.length;

            for (let i = 0; i < len; i++) {
                for (let j = 0; j < len; j ++) {
                    if(arr[i].id === arr[j].id) {
                        mun++;
                    }
                }
                arr[i].mun = mun;
                mun = 0;
            }
            return (function(songs){
                let result = {};
                 let finalResult=[];
                 for(let i=0;i<songs.length;i++){
                     result[songs[i].id]=songs[i];
                 }
                 for(item in result){
                     finalResult.push(result[item]);
                 }
                 return finalResult;
            }(arr));
        }(proList));

        console.log(results)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题