javascript计算数组重复元素个数,并计算个数

javascript计算数组重复元素个数,并计算个数!ex:varlist=[{"id":1,"name":"AA"},{"id":1,"name":"AA"},{"id... javascript计算数组重复元素个数,并计算个数!
ex:

var list = [ {"id":1, "name": "AA"}, {"id":1, "name": "AA"}, {"id":1, "name": "AA"}, {"id":2, "name": "BB"}];
如何用javascript计算数组重复的{"id":1, "name": "AA"}个数并且变成
var list2 = [ {"id":1, "name": "AA","number":3}, {"id":2, "name": "BB","number":1}];
展开
 我来答
zwjtk
2015-04-20 · TA获得超过1741个赞
知道小有建树答主
回答量:300
采纳率:82%
帮助的人:209万
展开全部

楼上的回答,如果只针对题主的需求,应该可以解决问题了。

但是,如果考虑的更全面些,我们应该考虑到JS数组中的数据类型可以是多样的(有可能是Object、Array、String...)

所以我写了一个比较复杂的,效率可能比较低,可以慢慢优化:

(function(){
   function isObject(o) {
       return Object.prototype.toString.call(o) === '[object Object]';
   }
   function isArray(o) {
       return Object.prototype.toString.call(o) === '[object Array]';
   }
   function duplicate(arr) {
       var tmp;
       if (!arr || arr.length === 0) {
           return [];
       }
       for (var i = 0, len = arr.length; i < len; i++) {
           tmp = arr[i];
           if (isArray(tmp)) {
               for (var j = i + 1; j < len; j++) {
                   if (isArray(arr[j]) && tmp.length === arr[j].length) {
                       var flag = false;
                       for (var k = 0; k < tmp.length; k++) {
                           if (tmp[k] !== arr[j][k]) {
                               flag = true;
                               break;
                           }
                       }
                       if (!flag) {
                           arr.splice(j, 1);
                           len--;
                           j--;
                       }
                   }
               }
           } else if (isObject(tmp)) {
               for (var j = i + 1; j < len; j++) {
                   if (isObject(arr[j])) {
                       var tmpKey = [], objKey = [], flag = false;
                       for (var k in tmp) {
                           tmpKey.push(k);
                       }
                       for (var l in arr[j]) {
                           objKey.push(l);
                       }
                       if (tmpKey.length === objKey.length) {
                           for (var key in tmp) {
                               if (tmp[key] !== arr[j][key]) {
                                   flag = true;
                                   break;
                               }
                           }
                       }
                       if (!flag) {
                           arr.splice(j, 1);
                           len--;
                           j--;
                       }
                   }
               }
           } else {
               for (var j = i + 1; j < len; j++) {
                   if (tmp === arr[j]) {
                       arr.splice(j, 1);
                       len--;
                       j--;
                   }
               }
           }
       }
       return arr;
   }

   var list = [{"id":1, "name": "AA"}, {"id":1, "name": "AA"}, {"id":1, "name": "AA"}, {"id":2, "name": "BB"}];
   var ls = [{"id":1, "name": "AA"}, {"id":1, "name": "AA"}, [12, 23], [12, 23], [12, 23, 34], {"xxx": "yyy", "id": 2}, "aa", "aa", "aabb"];
   var list2 = duplicate(list);
   var ls2 = duplicate(ls);
   
   console.log(list2);
   console.log(ls2);
})();

希望能解决题主的问题...

zero7u
推荐于2017-10-01 · TA获得超过238个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:156万
展开全部
var list2 = [];
var listMap = {};
for (var i = 0, len = list.length, id, name, key; i < len; i++) {
    id = list[i].id;
    name = list[i].name;
    key = id + '-' + name; // key为id和name的组合,值为number
    if (!!listMap[key]) {
        listMap[key]++;
    } else {
        listMap[key] = 1;
    }
}
for (var item in listMap) {
    list2.push({
        id: item.split('-')[0],
        name: item.split('-')[1],
        number: listMap[item]
    })
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heshibo111
2017-10-27 · TA获得超过131个赞
知道小有建树答主
回答量:117
采纳率:100%
帮助的人:40.2万
展开全部
var index={};//声明标识
var list = [ {"id":1, "name": "AA"}, {"id":1, "name": "AA"}, {"id":1, "name": "AA"}, {"id":2, "name": "BB"}];
var list2 = [];
for(var i =0;i<list.length;i++){
    var id =list[i].id;//取出id
    var token = id+'total'; //声明某的对象的出现次数
    if(index[id]==undefined){//如果没有该对象属性,说明第一次
        index[id]=id;
        index[token]=1;//默认出现次数为1次
        list2.push(list[i]);
    }else{//出现多次
        index[token]++;//数据
    }
   alert(JSON.stringify(index))
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式