问题描述
- JS或JQuery 取数组中相同的内容
-
[['1','a','b'],['2','a','c'],['2','a','b'],['3','a','b'],['2','a','c']]
得到結果
[['6','a','b'],['4','a','c']]当第2、3位相同时将第一位的算和,请问各位大神用JS或JQuery 有什么好方法?谢谢了
解决方案
var arr = [['1', 'a', 'b'], ['2', 'a', 'c'], ['2', 'a', 'b'], ['3', 'a', 'b'], ['2', 'a', 'c']];
var kv = {},k;
for (var i = 0; i < arr.length; i++) {
k = arr[i][1] + arr[i][2]
kv[k] = (kv[k] || 0) + parseInt(arr[i][0]);
}
var rst = [];
for (k in kv) rst.push([kv[k]].concat(k.split('')));
console.log(rst)
解决方案二:
<script>
var arr=[['1','a','b'],['2','a','c'],['2','a','b'],['3','a','b'],['2','a','c']];
var obj={};
for(var i=0;i<arr.length;i++){
var subArr = arr[i];
var key = subArr[1]+','+subArr[2];
if(!obj[key]){
obj[key] = 0;
}
obj[key] = parseInt(obj[key],10)+parseInt(subArr[0],10);
}
debugger;
var result = [];
for(var m in obj){
result[result.length] =[obj[m]].concat(m.split(","));
}
alert(result);
</script>
解决方案三:
var arr = [[1, 'a', 'b'],[2, 'a', 'c'],[2, 'a', 'b'],[3, 'a', 'b'],[2, 'a', 'c']];
var arrTemp = [];
var result = [];
arr.forEach(function (item) {
var len = item.length;
var n = parseInt(item[0]);//第一个值,用来相加
var o = item.slice(1, len).join("");//将数组后面的单个字符连接在一起作为对象的属性,无论后面有几个都可以做到只要属性相同就求和
var hasItem = false;
//判断是否已经存在该属性。
arrTemp.forEach(function (obj, index) {
//已经存在,则直接计算和,然后更新
if (obj.hasOwnProperty(o)) {
var t = obj[o] + n;//t为原来的和加上现在的值
var zz = {};
zz[o] = t;
arrTemp[index] = zz;//更新
hasItem = true;
return false;
}
}
)
//不存在则加入
if (!hasItem) {
var zz = {};
zz[o] = n;
arrTemp.push(zz);
}
});
//从对象数组中取出需要的数组结果。
arrTemp.forEach(function (o) {
for (i in o) {
if (o.hasOwnProperty(i)) {
var strArr = i.toString().split("");//对象的属性字符串转成数组。
var r = [o[i].toString()].concat(strArr);
result.push(r);
}
}
});
console.log(result);
时间: 2024-12-31 02:13:54