题目大致是一个数组,内部元素是N个对象,对象内包含name和count属性,例如以下代码,代码中每个对象元素中都包含name属性和count属性,而name属性是可重复的,可能会是n个,count是数值型。

像不像小时候老师计算,1班男生20个,1班男生20个,2班。。。。。。

let arr = [{name: 'name1', count: 1},{name: 'name1', count: 3},{name: 'name2', count: 1},{name: 'name2', count: 3},{name: 'name2', count: 4},{name: 'name3', count: 4},{name: 'name3', count: 1},{name: 'name3', count: 9},
]

最终的结果是希望,arr数组中这些元素,可以实现name属性的过滤去重,并且去重过程中name值合并,并且count值累加。

累加的结果就像小时候校长来了,也开始计算,1班学生40个,2班学习42个,3班。。。。。。

let arr2 = [{name: 'name1', count: 4},{name: 'name2', count: 8},{name: 'name3', count: 14},
]

这道题的示例内容较少,你当然可以把这道题看成是一道口算题,但如果数组内的元素更多了呢,多到看不过来,恐怕口算难以支撑结果的实现了。

1、定义新变量

定义一个新对象,变量newArr ,新对象用来去重,利用对象的key值唯一的原理(先不考虑symbol这个新的数据类型);

定义一个新数组,变量newArr, 新数组用来做什么?用来装去重后的新内容,而不是在原数组做污染,避免越弄越乱。

let newArr = [];
let newObj = {};
for (let i=0;i<arr.length;i++) {// 如果对象里有这个name1,就将值累加if (newObj[arr[i]['name']]) {let oldCount = newObj[arr[i]['name']]['count'];let newCount = arr[i]['count'];newObj[arr[i]['name']] = {name: arr[i]['name'], count: oldCount + newCount}} else { // 如果对象里没有这个name1 就创建newObj[arr[i]['name']] = {name: arr[i]['name'], count: arr[i]['count']};}
}
console.log(newObj);

这一步的逻辑呢就是先定义一个空对象,对象的key值是唯一的,所以当我们判断对象里的name属性为空,那么就给对象新创建一个key值,而这个key值就是数组子元素的name值,而一旦判断对象中有整个key值了,证明至少已经有了一次count值了,这个时候再去给这个唯一的name元素累加即可。

这个时候得到的是一个新的newObj,已经实现了name值去重,count累加,但是这还是一个object,而不是一个数组,下一步就是转换。

2、转换

上一步得到了一个去重后的对象,并且已经将count值做了累加,但要求的是一个数组。还记得第一步预设定了一个变量  newArr,我们将newObj装进来就可以了

for (let key in newObj) {newArr.push(newObj[key]);
}
console.log(newArr);

大学解惑03 - 数组内包含多个name和count的对象元素,name去重,并且count累加相关推荐

  1. js 数组内删除某个对象(或确定该对象索引值)

    开发的过程中,我们会经常下面的业务需求,比如,我们有一个数组,数组内包含是对象,我想删除数组内的某个对象,那么我肯定会去选择splice的方法,那么我就需要知道我想要删除的对象的索引值,那么本文就是记 ...

  2. js判断是由含有a节点_如何在 JS 中判断数组是否包含指定的元素(多种方法)

    作者:Abhilash Kakumanu 译者:前端小智 来源:medium 最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了. 简介 ...

  3. 检查Bash数组是否包含值

    在Bash中,最简单的测试数组是否包含某个值的方法是什么? 编辑 :在答案和评论的帮助下,经过一些测试,我想到了这个: function contains() {local n=$#local val ...

  4. es6 find 数组内查询用法

    写在开头 1.第二次发布,希望能发布上 2.每当碰到新的问题搜索时,总是搜索多个结果才能从复杂的答案中理解清楚 3.直到遇到了思否,答案简单明了,一看就懂 希望自己也能很清晰地表达清楚,让朋友一看就懂 ...

  5. LeetCode:Find Peak Element - 寻找一个数组内的顶点

    2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Find Peak Element(寻找一个数组内的顶点) 2.题目地址 https://leetcode.co ...

  6. 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字

    今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...

  7. 【LeetCode】面试题 03. 数组中重复的数字

    [LeetCode]面试题 03. 数组中重复的数字 文章目录 [LeetCode]面试题 03. 数组中重复的数字 一.遍历数组 二.原地置换 总结 一.遍历数组 由于只需要找出数组中任意一个重复的 ...

  8. java将数组置零的函数,Java Script 数组内置函数

    内置函数 一.数字常用方法 to.Fixed(n) 保留小数n位 前提是数字才能使用 二.数组常用方法 1.push:向数组的末尾添加一个或更多元素,并返回新的长度.(改变原数组) var sum = ...

  9. JavaScript数组内置方法-知识

    /*         *  数组中常用的内置方法:基于这些方法可以让我们有效的对数组进行操作         *  console.dir(Array.prototype)  查看数组内置方法     ...

最新文章

  1. smarty模板引擎_6-Smarty的内置函数
  2. 蓝桥杯 第三届C/C++预赛真题(7) 放棋子(水题)
  3. hdfs web_ui深入讲解、服务启动日志分析、NN SNN关系
  4. 【跟着我们学Golang】Go语言全平台安装
  5. Leetcode--1111. 有效括号的嵌套深度(Java)
  6. python3爬取百度图片
  7. python 每天执行一次_python 定时器每天就执行一次的实现代码
  8. Spring 声明式事务应该怎么学?
  9. hwui opengl VS skia opengl VS skia vulkan?
  10. [转]用C++实现插件体系结构
  11. 计算机操作系统笔记(四)
  12. php京东接口开发,技术文档
  13. smartprinter 这个绝对程序猿的福音啊
  14. 关于在递归中删除链表结点不会导致链表断链的理解
  15. 直播--android端推流实现一
  16. 迷宫生成与路径规划算法-Python3.8-附Github代码
  17. 一文读懂运放的共模输入和输出
  18. 停车还能360全方位影像_360°全景倒车影像、自适应巡航买的时候觉得没用,现在发现错了...
  19. 程序与生活:网上看的一篇文章,据说越有钱越应该看
  20. java案例----用户注册--发送邮件并激活/发送邮件验证码

热门文章

  1. python之数据分析可视化(b站排行播放量,简单详细)
  2. 基于深度卷积神经网络,深度卷积神经网络结构
  3. 3Dmax』打造沐浴用的金属软管
  4. 大一计算机新生,感觉什么都学不会怎么办?
  5. 蠕虫mysql_一个MS SQL蠕虫代码_MySQL
  6. vm打开虚拟机蓝屏问题
  7. 易中天的十句话---也许对每个人都会有一点启发
  8. Yii使用find findAll查找使用
  9. 计算机学院毕业相当于计算机几级,大学计算机一级和二级的区别是什么?有必要考吗?...
  10. android 中间大两边小,Banner两边小中间大的动画