js-JS或JQuery 取数组中相同的内容

问题描述

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

js-JS或JQuery 取数组中相同的内容的相关文章

JavaScript学习笔记之取数组中最大值和最小值_javascript技巧

推荐阅读:JavaScript学习笔记之数组的增.删.改.查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 在实际业务中有的时候要取出数组中的最大值或最小值.但在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法. 取数组中最大值 可以先把思路理一下: 将数组中第一个元素赋值给一个变量,并且把这个变量作为最大值: 开始遍历数组,从第二个元

编写js扩展方法判断一个数组中是否包含某个元素_javascript技巧

在C#语法中判断集合是否包含某个元素可以使用Contains方法,但是类似的问题在javascript中要怎么处理呢,js中没有Contains方法. 我们可以利用js的原型扩展来封装一个我们自己的Contains方法. js代码: 复制代码 代码如下: <script type="text/javascript"> $(function () { Array.prototype.contains = function (element) { //利用Array的原型pro

js检查某个元素在数组中的索引值

在现在代浏览器中判断一个元素在不在一个数组中,咱们可以用Array对象的indexOf()方法来取得这个元素在当前数组中的索引值,若索引值不等于-1,数组中就存在这个元素,例如:  代码如下 复制代码 var arr = [2,53,23,'test',9,'array']; //判断array在不在数组arr中 arr.indexOf('array') !== -1 ? alert('存在') : alert('不存在'); 但是IE9以前的版本都不支持此方法,那咱们就只能扩展一个:  代码如

js html div clone-JS 复制div中的所有内容

问题描述 JS 复制div中的所有内容 如图 点击添加签证申请人 追加一个 一样的DIV 该怎么实现并获取他们的值?? 解决方案 用jquery的clonehttp://www.cnblogs.com/guoxinkun/articles/2024379.html

jquery删除数组中重复元素_jquery

话不多说,下面就跟着小编来看下利用jquery实现删除数组中重复元素的具体思路吧 首先定义如下数组: var arr=[0,2,3,5,6,9,2]; 我们可以看到数组中存在重复元素'2'; 最后通过jquery筛选应该得到[0,2,3,5,6,9]; ok,首先我们再定义一个空数组,用来存放最后筛选出来的元素: var new_arr=[]; 利用jquery的$.inArray可以轻松实现: 遍历数组元素: for(var i=0;i<arr.length;i++) { var items=

Js取数组中最大值和最小值

Array.prototype.max = function(){   //最大值  return Math.max.apply({},this)  }  Array.prototype.min = function(){   //最小值  return Math.min.apply({},this)  } [1,2,3].max()// => 3 [1,2,3].min()// => 1 Array.max=function(array){    return Math.max.apply(

js使用for循环查询数组中是否存在某个值_javascript技巧

应为IE8不支持indexOf,所有写一个for循环方法来判断是否存在,并返回true false function isCon(arr, val){ for(var i=0; i<arr.length; i++){ if(arr[i] == val) return true; } return false; }  在js中添加此方法,在调用处调用该方法 window.onload = function(){ var arr=new Array(1,2,3,2,4,2,5,6,7,2,4,3,1

JS中取二维数组中最大值的方法汇总_javascript技巧

在JavaScript中可以通过内置的 Math.max() 的最大值,但是要从多重数组中取出最大值,还是有一定的难度. 问题描述 假设你有一个数组,而且这个数组中包含了数字的子数组,而我们要做的是从数组中的每个子数组中返回其最大的那个最大数. 基本解决方案 function largestOfFour(arr) { var results = []; // 创建一个results变量来存储 // 创建一个外层循环,遍历外层数组 for (var n = 0; n < arr.length; n

百度面试题:求一个已排序的数组中绝对值最小的元素

题目为: 有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现 例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4. 这一题该如何求呢? 初步的解决思路是:     1.数组中的元素全为正,取最左边的数字:     2.数组中的元素全为负,取最右边的数字的绝对值:     3.数组中有正数有负数,就用二分法查找,判断中间元素的符号        a)中间元素为