首页 > 编程语言 >JavaScript中的MAP对象

JavaScript中的MAP对象

时间:2023-07-27 17:45:33浏览次数:32  
标签:MAP const get 对象 JavaScript map 键值 key tempMap

MAP对象,存储格式为键值对。和普通对象无异,不过它的方法要特殊一些。

const map = new Map(); //created
map.set(key, value); //赋值
map.get(key); //读取
map.delete(key); //删除指定键值
map.clear(); //删除所有键值对

MAP对象主要用于频繁进行赋值删除时,会有更好的性能,同时键值可以为任意数据类型,譬如

const obj = {age: 18, name: 'richardo'};
map.set(obj, 18);
console.log(map); //{{age:18, name: 'richardo'} => 18}

同时,MAP对象中的键值对是有序的。

 

这里举一个例子,个人学习项目中的生成【小计行】,最后还能生成总计行。

 原数据类型类似,obj1~4都存在JSON对象中,其特点是每个对象内有相同属性,需要对应地累计。

const obj1 = {a: 0, b: 18, c: 233}
const obj2 = {a: 118, b: 0, c: 20}
const obj3 = {a: 5, b: 12, c: 0}
const obj4 = {a: 118, b: 0, c: 0}

 

HTML部分:

  <el-table
      id="tableID"
      ref="tableRef"
      :data="processData">
    <el-table-column label="序号" type="index" width="60" align="center"/>
    <el-table-column v-for="(item, index) in state.colObj" :key="index" :prop="item.prop" header-align="center"
                     :label="item.label" :align="item.align" :width="item.width" :min-width="item.minWidth" />
  </el-table>

计算部分:

const billType = ['RepairCount', 'RejectBill', 'DoingBill', 'MarkBill', 'DoneBill']
//合计数据
const processData = computed(() => {
  let tempObj = {}
  let tempArr = []
  const tempMap = new Map()
  const countMap = new Map()
  state.tableData.forEach((item, index, arr) => {
    tempArr.push(item)
    if(item.CompanyName === arr[index + 1]?.CompanyName){
      //若后一项的公司和当前相同,则加上该值
      billType.forEach(key => {
        tempMap.set(key, (tempMap.get(key) || 0) + item[key])
      })
    } else {
      billType.forEach(key => {
        tempMap.set(key, (tempMap.get(key) || 0) + item[key])
        countMap.set(key, (countMap.get(key) || 0) + tempMap.get(key))
        tempObj[key] = tempMap.get(key)
      })
      tempArr.push({UserName: '小计', ...tempObj})
      tempMap.clear()
      if(index === arr.length - 1) {
        billType.forEach(key => {
          tempObj[key] = countMap.get(key)
        })
        tempArr.push({UserName: '总计', ...tempObj})
      }
    }
  })
  return tempArr
})

 

个人用的后端是Node JS,这么看来同样的小计生成在后端也能完成就是了。

 

小作一记,巩固储备。

标签:MAP,const,get,对象,JavaScript,map,键值,key,tempMap
From: https://www.cnblogs.com/ricardox3/p/17585610.html

相关文章

  • Golang中结构体映射mapstructure库深入详解
    mapstructure用于将通用的map[string]interface{}解码到对应的 Go 结构体中,或者执行相反的操作。很多时候,解析来自多种源头的数据流时,我们一般事先并不知道他们对应的具体类型。只有读取到一些字段之后才能做出判断 +目录在数据传递时,需要先编解码;常用的方式是JSON编解码......
  • java8 list转map把key重复的value合并
    无序Map<String,List<GeneralVO>>groupMap=generalVOS.stream().collect(Collectors.groupingBy(GeneralVO::getTaskId));有序Map<String,List<GeneralVO>>groupMap2=generalVOS.stream().collect(Collectors.groupingBy(GeneralVO::getTa......
  • 配置文件的介绍,静态文件的配置,request对象请求方法,pycharm连接数据库,Django连接My
    配置文件的介绍#注册应用的INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.c......
  • [Javascript] removeEventListener
    Mistake1:Notusingthesamefunctionreference//Wrongbutton.addEventListener('click',()=>{console.log('click')})button.removeEventListener('click',()=>{console.log('click')})//Won'tremovet......
  • OpenCV4之特征提取与对象检测
    1、图像特征概述图像特征的定义与表示图像特征表示是该图像唯一的表述,是图像的DNA图像特征提取概述传统图像特征提取-主要基于纹理、角点、颜色分布、梯度、边缘等深度卷积神经网络特征提取-基于监督学习、自动提取特征特征数据/特征属性尺度空间不变性像素迁移不......
  • Collection 和 Collections 有什么区别?list set map区别
    Collection和Collections有什么区别?java.util.Collection是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直......
  • go map中的slice
    看以下代码:funcmain(){ mym:=make(map[int32][]bool) slice,ok:=mym[1] if!ok{ slice=[]bool{} mym[1]=slice } slice=append(slice,false) print(mym)}该无法无法往mym中插入数据,原因在于:在该代码中,当将元素追加到slice中时,实际上是在更改slice变......
  • 【小实验】javascript 能够表述的最大整数
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯打开浏览器的控制台,开始输入数值:输入:(16位十进制值)9999999999999998返回同样结果输入:9999999999999999返回:10000000000000000数值不一样,说明精度已经开始丢......
  • 面向对象的设计模式
    SOLID设计原则(面向对象)一句话归纳目的单一职责一个类或模块应该只有一个引起它变化的原因。一个类或模块应该只有一个主要职责,这样可以使代码更加清晰、易于理解和维护。开闭原则软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。强调在添加新功能时不需要修......
  • ChatGPT 在JavaScript中,由于Number类型只能表示52位精度,因此默认情况下无法进行超过16
    ChatGPT在JavaScript中,由于Number类型只能表示52位精度,因此默认情况下无法进行超过16位的乘法运算。但是,你可以使用BigInt来处理大数字。BigInt是目前JavaScript中处理超出Number精度限制的数字的最佳方式。它是一种新的数据类型,可以表示任意精度的整数。以下是一种解决方案:1.......