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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript计算数组重复元素个数,并计算个数相关的知识,希望对你有一定的参考价值。

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];

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

但是,如果考虑的更全面些,我们应该考虑到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);
)();

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

参考技术A 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]
    )

本回答被提问者采纳
参考技术B 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))

c语言如何判断一个数组中重复元素的个数,并输出这个个数的值?

例如,a[6]=0,1,1,5,1,5,如何通过运算输出“数组共有2个数字5”和“数组共有3个数字1”?

如下:

#include <stdio.h>
#include <stdlib.h>
int main()

int n;
int *a;
int i;
scanf("%d", &n);
a = (int *)malloc(sizeof(int) * n);
for(i = 0; i < n; i ++)

    scanf("%d", &a[i]);

for(i = 0; i < n - 1; i ++)

        for(int j = 0; j < n - i - 1; j ++)
        
            if(a[j] > a[j+1])
            
                int tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            
        

int tmp = a[0];
int count = 1;
for(i = 1; i < n; i ++)

    if(tmp == a[i])
    
        count ++;
    
    else
    
        if(count > 1)
        
            printf("数组共有%d个数字%d\\n", count, a[i - 1]);
        
        tmp = a[i];
        count = 1;
    

if(count > 1)

    printf("数组共有%d个数字%d\\n", count, a[i - 1]);

free(a);
return 0;

我的思路是,先排序,再输出。

追问

a = (int *)malloc(sizeof(int) * n);
这一步是什么意思,可能我还没有学到,不懂

追答

这一步,C语言中,你如果未知数组大小,就需要在内存中创建一个数组,使用malloc申请内存,让指针指向该内存。
而由于这里申请了空间,在不用的时候需要使用free释放这一块空间。
如果你已经知道数组大小,直接使用int a[6];就行了

参考技术A

代码如下 :

#include <stdio.h>

#define MAX 100 // 数组最大数

typedef struct _Node 
int value;
int count;
Node;

typedef struct 
Node values[MAX];
int size;
List;

Node *List_Add(List *pList, int value) 

Node *pNode = &pList->values[pList->size];

pNode->value = value;
pNode->count = 1;

pList->size++;

return pNode;


Node *List_Find(List *pList, int value)

int i;

for (i = 0; i < pList->size; i++) 
if (pList->values[i].value == value) 
return &pList->values[i];



return NULL;


int main()

int numbers[MAX], n, i;
List list;

scanf("%d", &n);

for (i = 0; i < n; i++) 
scanf("%d", &numbers[i]);


list.size = 0;

for (i = 0; i < n; i++) 

Node *pNode = List_Find(&list, numbers[i]);

if (pNode != NULL) 
pNode->count++;

else 
List_Add(&list, numbers[i]);



for (i = 0; i < list.size; i++) 
if (list.values[i].count >= 2) 
printf("数组共有%d个数字%d\\n", list.values[i].count, list.values[i].value);



return 0;

运行结果:

追问

能讲一下大致的思路吗?

追答

思路是定义一个数据结构Node保存数字和数字的对应出现次数。程序首先从键盘读取统计的数字个数 n, 然后再从键盘读取 n 个数字保存到数组 numbers 中。
然后,第二个 for 循环进行统计每个数字出现的次数,保存到 List Node 中。
最后,第三个 for 循环进行输出数字出现次数count大于2统计的结果。

以上是关于javascript计算数组重复元素个数,并计算个数的主要内容,如果未能解决你的问题,请参考以下文章

C语言数组判断是不是有重复元素?

js计算数组中某个元素重复出现的个数

C语言问题 把一个数组中的重复元素去掉

计算数组中每个数左边/右边第一个比其大/小的值

在Python中计算数组元素[重复]

怎样求数组中元素重复的次数