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);
})();
希望能解决题主的问题...
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2017-10-01
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]
})
}本回答被提问者采纳
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]
})
}本回答被提问者采纳
第2个回答 2017-10-27
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))
}
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))
}