扫码关注官方订阅号
二维数组初始值:
[['a',2],['a',1],['a',1],['a',1],['b',1],]
统计重复并计数后的结果:
[['a',5],['b',1]]
用Javascript怎么能简单的实现以上功能?
'a' 是重复值
闭关修行中......
var obj = {}; var outer = []; [['a',2],['a',1],['a',1],['a',1],['b',1],].forEach(function(arr){ obj[arr[0]] = obj[arr[0]]? obj[arr[0]] + arr[1] : arr[1]; }); for (var i in obj){ outer.push([i,obj[i]]) }
用了 ES2015 的语法,如果你不能支持新语法,自己稍作改动就行了
let data = [["a", 2], ["a", 1], ["a", 1], ["a", 1], ["b", 1]]; // 临时 MAP,用于记录哪些 key 已经遇到过了,同时记录它在 result 中的 index let map = {}; // 合并后的结果 let result = []; data.forEach((d) => { let key = d[0]; let v = d[1]; let index = map[key]; // 如果 index 是 undefined 说明是第一次遇到 if (index === void 0) { // 加到 map 中去,它的 index 就是加入 result 前的 result.length map[key] = result.length; result.push([key, v]); } else { // 改变值 result[index][1] = result[index][1] + v; } }); console.log(result); // [ [ 'a', 5 ], [ 'b', 1 ] ]
var arr = [['a',2],['a',1],['a',1],['a',1],['b',1]];var result = {};arr.map(function(item){ if(result[item[0]]){
result[item[0]] += item[1]
}else{
result[item[0]] = item[1]
}});
var a = [['a',2],['a',1],['a',1],['a',1],['b',1]] var b = [] a.forEach(i => { // 循环数据组 let index = b.findIndex(j=>i[0]==j[0]) // 查找索引 if (index == -1) { // 没找到 b.push(i) } else { // 找到 b[index][1]+=i[1] } }) console.log(b)
好像写的有点多:
var arr = [['a', 2], ['a', 1], ['a', 1], ['a', 1], ['b', 1]]; var contains = function(src, key) { return src.find(a => a[0] === key); }; var unduplicated = arr.reduce((p, item) => { let o = contains(p, item[0]); o ? o[1] += item[1] : p.push(item); return p; }, []); console.log(unduplicated); //[['a', 5], ['b', 1]]
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> var data = [["a", 2], ["a", 1], ["a", 1], ["a", 1], ["b", 1]]; var arr = []; var obj = {}; data.forEach(function(element,index){ if(arr){ var ha = arr.map(function(a,b){ return a[0] }); if(ha.indexOf(element[0]) <0){ arr.push(element); }else{ // arr[ha.indexOf(element[0])] += element[1] arr[ha.indexOf(element[0])][1] += element[1] } } }) console.log(arr); </script> </body> </html>
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
用了 ES2015 的语法,如果你不能支持新语法,自己稍作改动就行了
var arr = [['a',2],['a',1],['a',1],['a',1],['b',1]];
var result = {};
arr.map(function(item){
if(result[item[0]]){
}else{
}
});
好像写的有点多: