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];就行了
代码如下 :
#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计算数组重复元素个数,并计算个数的主要内容,如果未能解决你的问题,请参考以下文章