qq_42218258
你吃西瓜皮
采纳率100%
2019-06-19 08:56 阅读 1.0k

js把name和key相同的把value相加组成新的json对象,其余的保留 。感谢!

var arr1 = [
{name: "萧何", key: "屌丝", value: 52},
{name: "萧何", key: "屌丝", value: 22},
{name: "张良", key: "高富帅", value: 52},
{name: "韩信", key: "纯屌丝", value: 66},
{name: "韩信", key: "纯屌丝", value: 61},
{name: "刘邦", key: "屌丝", value: 55},
...
];

//结果
var arr2 = [
{name: "萧何", key: "屌丝", value: 74},
{name: "张良", key: "高富帅", value: 52},
{name: "韩信", key: "纯屌丝", value: 127},
{name: "刘邦", key: "屌丝", value: 55},
...
]

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    qq_35235940 听楼一夜雨 2019-06-19 10:52
    <script type="text/javascript">
    var arr = [
    {name: "萧何", key: "屌丝", value: 52},
    {name: "萧何", key: "屌丝", value: 22},
    {name: "张良", key: "高富帅", value: 52},
    {name: "韩信", key: "纯屌丝", value: 66},
    {name: "韩信", key: "纯屌丝", value: 61},
    {name: "刘邦", key: "屌丝", value: 55},
    ];
    function test(arr) {
        var newarray = [];
        var checkarray=[];
        arr.forEach(function(value,keyindex){
            if(newarray.length==0){
                newarray.push(value);
                checkarray.push(value.name);//根据name去重判断
            }else{
                newarray.forEach(function(valueIndex,keyindex){
                    if(valueIndex.name==value.name&&valueIndex.key==value.key){
                        valueIndex.value+=value.value;
                    }else if($.inArray(value.name,checkarray)==-1){
                    //避免相同name数据重复
                        newarray.push(value);
                        checkarray.push(value.name);
                        $.unique(newarray);
                        $.unique(checkarray);
    
                    }
                })          
            }
    
    
        })
        return newarray;
    }
    console.log(test(arr))
    
    </script>
    
    点赞 1 评论 复制链接分享
  • en_joker 孤芳不自賞 2019-06-19 10:05

    思路:
    1、创建一个新数组用于存储相同name+key的对象;
    2、在自己数组中进行遍历判断name+key是否一致,一致从数组中移除并value值相加放到新数组中。
    3、遍历两个数组,判断name+key是否一致,一致从两个数组中直接移除并value值相加放到新数组。

    点赞 1 评论 复制链接分享
  • weixin_43914888 梓隽 2019-06-19 10:43

    一楼说的对,再弄个新集合。

    点赞 评论 复制链接分享
  • qq_42218258 你吃西瓜皮 2019-06-19 17:56

    //经过123楼以及度娘启发:

    var arr = [
    {name: "萧何", key: "屌丝", value: 52},
    {name: "萧何", key: "屌丝", value: 22},
    {name: "张良", key: "高富帅", value: 52},
    {name: "韩信", key: "纯屌丝", value: 66},
    {name: "韩信", key: "纯屌丝6", value: 61},
    {name: "刘邦", key: "屌丝", value: 55},
    ];
    function trans(arr){
    var result = [];
    for(var i = 0; i < arr.length; i++) {
    var sum = arr[i].value;
    var arrOld = arr.concat([]);
    for(var j = arr.length - 1; j > i; j--) {
    
                if(arr[i].name === arr[j].name&&arr[i].key === arr[j].key) {
                    sum += arr[j].value;
                    arrOld.splice(j, 1);
                }
            }
            arr = arrOld;
            result.push({
                name:arr[i].name,
                key:arr[i].key,
                value:sum
            });
           // console.log(arr[i].name,arr[i].key,sum)
        }
        return result;
    }
    console.log(trans(arr))
    
    点赞 评论 复制链接分享

相关推荐