大学解惑03 - 数组内包含多个name和count的对象元素,name去重,并且count累加
题目大致是一个数组,内部元素是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累加相关推荐
- js 数组内删除某个对象(或确定该对象索引值)
开发的过程中,我们会经常下面的业务需求,比如,我们有一个数组,数组内包含是对象,我想删除数组内的某个对象,那么我肯定会去选择splice的方法,那么我就需要知道我想要删除的对象的索引值,那么本文就是记 ...
- js判断是由含有a节点_如何在 JS 中判断数组是否包含指定的元素(多种方法)
作者:Abhilash Kakumanu 译者:前端小智 来源:medium 最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了. 简介 ...
- 检查Bash数组是否包含值
在Bash中,最简单的测试数组是否包含某个值的方法是什么? 编辑 :在答案和评论的帮助下,经过一些测试,我想到了这个: function contains() {local n=$#local val ...
- es6 find 数组内查询用法
写在开头 1.第二次发布,希望能发布上 2.每当碰到新的问题搜索时,总是搜索多个结果才能从复杂的答案中理解清楚 3.直到遇到了思否,答案简单明了,一看就懂 希望自己也能很清晰地表达清楚,让朋友一看就懂 ...
- LeetCode:Find Peak Element - 寻找一个数组内的顶点
2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Find Peak Element(寻找一个数组内的顶点) 2.题目地址 https://leetcode.co ...
- 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字
今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...
- 【LeetCode】面试题 03. 数组中重复的数字
[LeetCode]面试题 03. 数组中重复的数字 文章目录 [LeetCode]面试题 03. 数组中重复的数字 一.遍历数组 二.原地置换 总结 一.遍历数组 由于只需要找出数组中任意一个重复的 ...
- java将数组置零的函数,Java Script 数组内置函数
内置函数 一.数字常用方法 to.Fixed(n) 保留小数n位 前提是数字才能使用 二.数组常用方法 1.push:向数组的末尾添加一个或更多元素,并返回新的长度.(改变原数组) var sum = ...
- JavaScript数组内置方法-知识
/* * 数组中常用的内置方法:基于这些方法可以让我们有效的对数组进行操作 * console.dir(Array.prototype) 查看数组内置方法 ...
最新文章
- smarty模板引擎_6-Smarty的内置函数
- 蓝桥杯 第三届C/C++预赛真题(7) 放棋子(水题)
- hdfs web_ui深入讲解、服务启动日志分析、NN SNN关系
- 【跟着我们学Golang】Go语言全平台安装
- Leetcode--1111. 有效括号的嵌套深度(Java)
- python3爬取百度图片
- python 每天执行一次_python 定时器每天就执行一次的实现代码
- Spring 声明式事务应该怎么学?
- hwui opengl VS skia opengl VS skia vulkan?
- [转]用C++实现插件体系结构
- 计算机操作系统笔记(四)
- php京东接口开发,技术文档
- smartprinter 这个绝对程序猿的福音啊
- 关于在递归中删除链表结点不会导致链表断链的理解
- 直播--android端推流实现一
- 迷宫生成与路径规划算法-Python3.8-附Github代码
- 一文读懂运放的共模输入和输出
- 停车还能360全方位影像_360°全景倒车影像、自适应巡航买的时候觉得没用,现在发现错了...
- 程序与生活:网上看的一篇文章,据说越有钱越应该看
- java案例----用户注册--发送邮件并激活/发送邮件验证码
热门文章
- python之数据分析可视化(b站排行播放量,简单详细)
- 基于深度卷积神经网络,深度卷积神经网络结构
- 3Dmax』打造沐浴用的金属软管
- 大一计算机新生,感觉什么都学不会怎么办?
- 蠕虫mysql_一个MS SQL蠕虫代码_MySQL
- vm打开虚拟机蓝屏问题
- 易中天的十句话---也许对每个人都会有一点启发
- Yii使用find findAll查找使用
- 计算机学院毕业相当于计算机几级,大学计算机一级和二级的区别是什么?有必要考吗?...
- android 中间大两边小,Banner两边小中间大的动画