首页 > 其他分享 >对象数组相同值合并

对象数组相同值合并

时间:2022-11-21 13:23:28浏览次数:38  
标签:arr 数组 相同 55 合并 语文 item fraction name

面试题中往往会遇到这样的笔试题,将以下数组对象合并相同值

var arr = [{
                "name": "语文",
                "fraction": 80
            }, {
                "name": "数学",
                "fraction": 70
            }, {
                "name": "语文",
                "fraction": 50
            }, {
                "name": "语文",
                "fraction": 90
            }, {
                "name": "数学",
                "fraction": 100
            }, {
                "name": "数学",
                "fraction": 55
            }, {
                "name": "语文",
                "fraction": 99
            }]

在实际项目中,我们经常会遇到这种格式的数据,这种格式让人阅读起来很不直观,而且不利于代码的维护。废话不多说了直接上代码

第一种方式:

arr = arr.map(function(item, index, arr) {
    const i = arr.find(_item => item.name === _item.name);
    if(i !== item) {
        i.fraction.push(item.fraction);
        return undefined;
    } else {
        i.fraction = [i.fraction];
        return i;
    }
}).filter(item => item !== undefined);
输出结果:
[{
    "name": "语文",
    "fraction": [80, 50, 90, 99]
}, {
    "name": "数学",
    "fraction": [70, 100, 55]
}, {
    "name": "英语",
    "fraction": [55, 89]
}]

第二种方式:推荐

var res =[];
var narr=[];
    for(var i =0;i<arr.length;i++){
        var n = res.indexOf(arr[i].name);
    if(n == -1){
        res.push(arr[i].name);
        narr.push({"name":arr[i].name,fraction:[arr[i].fraction]})
        }else{
        narr[n].fraction.push(arr[i].fraction)
        }
    }
console.log(narr) 
输出结果:
[{
    "name": "语文",
    "fraction": [80, 50, 90, 99]
}, {
    "name": "数学",
    "fraction": [70, 100, 55]
}, {
    "name": "英语",
    "fraction": [55, 89]
}]
转自于:https://www.csdn.net/tags/MtjaUgwsMDEwMDUtYmxvZwO0O0OO0O0O.html

标签:arr,数组,相同,55,合并,语文,item,fraction,name
From: https://www.cnblogs.com/Ao-min/p/16911127.html

相关文章

  • js 数组对象根据多个key值进行分类
    constlist=[{id:1,name:"手机1",orderNo:"6901443393268",sku:"51095BKR"},{id:2,name:"手机2",orderNo:"6901443393262",sku:"51095BBQ"},{id......
  • Git 日志合并
    Git日志合并如下图提交4次记录,将最近三次合方法一(gitreset--softcommitID):#1.查看日志gitlog#2.合并最后三次提交gitreset--soft'29504f7ae52cf6c59......
  • 320 场周赛 数组中不等三元组的数目
    320场周赛数组中不等三元组的数目给你一个下标从0开始的正整数数组nums。请你找出并统计满足下述条件的三元组(i,j,k)的数目:0<=i<j<k<nums.lengthnums......
  • git 新建分支 合并分支
    合并分支日常开发dev分支,版本发布时,dev分支合并到master分支上。1、进入要合并的分支(如dev分支合并到master,先切换到master分支)gitcheckoutmastergitpull2、查看所有......
  • 每日算法之调整数组顺序使奇数位于偶数前面(二)
    JZ81调整数组顺序使奇数位于偶数前面(二)描述输入一个长度为n整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面......
  • P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并
    有一说一,雨天的尾巴我其实骂了很久。主要是题面之前一直没耐心读,然后后面在其他地方看到了形式化题意,就做掉了。其实感觉有很多题都比这玩意适合当板子,所以这个迟到的板子......
  • 第2-3-8章 分片上传和分片合并的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里
    目录5.10接口开发-分片上传5.10.1分片上传介绍5.10.2前端分片上传插件webuploader5.10.3后端代码实现5.10.3.1接口文档5.10.3.2代码开发5.10.3.3接口测试5.11接口......
  • 函数指针数组
    /* Function:函数指针数组*/#include<stdio.h>#include<stdlib.h>intfunc1(intn){printf("func1:%d\n",n);returnn;}intfunc2(intn){......
  • 一维数组
    一维数组什么是数组一组相同数据类型的线性集合称为一维数组变量和一维数组常见的一维数组整形数组小数数组字符数组字符串数组创建一维数组语法数组元素类型......
  • ArrayList 可以完全替代数组吗?
    本文已收录到 GitHub·AndroidFamily,有Android进阶知识体系,欢迎Star。技术和职场问题,请关注公众号[彭旭锐]加入Android交流群。前言大家好,我是小彭。在前......