首页 > 其他分享 >js 数组按指定字段转map-list结构

js 数组按指定字段转map-list结构

时间:2023-11-07 09:13:40浏览次数:35  
标签:map name color arrayMap list js item type id

js 数组按指定字段转map-list结构

背景介绍

在开发过程中经常会出现接口返回整个数组,我们需要将数组进行二次处理,如下格式按照不同功能模块(type)进行数据拆分

原始数据

const list = [
    {"type":"red","id":1,"name":"a","count":1},
	{"type":"red","id":2,"name":"b","color":2},
	{"type":"green","id":3,"name":"c","color":3},
	{"type":"green","id":4,"name":"d","color":4},
	{"type":"blue","id":5,"name":"e","color":4},
	{"type":"blue","id":6,"name":"f","color":4}
];

转换方法

/**
 * @param {Object} listData 原始数据
 * @param {Object} field 字段 key
 */
const arrayToMap = (listData,field)=>{
    const arrayMap = {};
    listData.forEach(item => {
        const item_type = item[field];
        if (!arrayMap[item_type]) {
            arrayMap[item_type] = [];
        }
        // 将数据添加到相应 'type' 的数组中
        arrayMap[item_type].push(item);
    });
    return arrayMap;
}

测试验证

console.log(arrayToMap(list,'type'))
{
    "red": [
        {
            "type": "red",
            "id": 1,
            "name": "a",
            "count": 1
        },
        {
            "type": "red",
            "id": 2,
            "name": "b",
            "color": 2
        }
    ],
    "green": [
        {
            "type": "green",
            "id": 3,
            "name": "c",
            "color": 3
        },
        {
            "type": "green",
            "id": 4,
            "name": "d",
            "color": 4
        }
    ],
    "blue": [
        {
            "type": "blue",
            "id": 5,
            "name": "e",
            "color": 4
        },
        {
            "type": "blue",
            "id": 6,
            "name": "f",
            "color": 4
        }
    ]
}

标签:map,name,color,arrayMap,list,js,item,type,id
From: https://www.cnblogs.com/bxmm/p/17814255.html

相关文章

  • .NET(C#) LinkedList、Queue<T>和Stack<T>的使用
    本文主要介绍.NET(C#)中,LinkedList链表、Queue<T>队列和Stack<T>堆栈的使用,以及相关的示例代码。1、LinkedList(链表)链表中元素存储内存中是不连续分配,每个元素都有记录前后节点,节点值可以重复,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方......
  • js获去select选中值
    我想获取select选中的value,或者text,或者……比如这个:第一个option第二个option一:JavaScript原生的方法1:拿到select对象:`varmyselect=document.getElementById("select");2:拿到选中项的索引:varindex=myselect.selectedIndex;//selectedIndex代表的是你所选中项的ind......
  • Semaphore 和 CountdownEvent 的使用总结
    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释......
  • ArcMap生成矢量面的外接圆或外接矩形
      本文介绍在ArcMap软件中,基于一个面图层,绘制其中面要素的最小外接矩形、最小外接圆等的方法。  首先,我们来看一下本文需要实现的需求。现有一个面要素图层,其中包含多个面要素,如下图所示。我们希望绘制这个面要素图层的最小外接矩形——既包括这个完整的面要素图层的最小外接......
  • C#学习之ListBox,ComboBox,CheckListBox
    ListBox(文本列表)常用属性:Items:描述:ListBox中的项列表。默认值:空用法:可以使用Add(),AddRange(),Insert(),Remove(),Clear(),等方法来对Items集合进行管理。SelectedIndex:描述:ListBox中当前选择项的索引。默认值:-1(表示没有选中项)用法:通过设置或读取该属......
  • js之文档对象操作
    DOM:文档对象模型怎样选择对应的元素(即标签)?对元素能做哪些操作?DOM中将HTML文档视为树结构节点:网页中的所有内容叫节点。案例:网页开关灯渲染效果:......
  • JS 怎么获取视频第一帧作为封面图?
    要获取视频的第一帧作为封面图,你可以使用HTML5的<video>元素和JavaScript来实现。下面是一个简单的步骤:在HTML中,创建一个<video>元素,并设置视频的路径或URL:<videoid="myVideo"src="path/to/video.mp4"width="320"height="240"></video>在JavaScript中,......
  • Vue.js中如何将v-model与方法绑定
    在Vue.js中,可以使用v-model指令将表单元素的值与Vue实例中的数据属性进行双向绑定。如果你希望将v-model与方法绑定,可以使用计算属性或者自定义指令来实现。使用计算属性:通过定义一个计算属性来处理v-model的绑定,并在需要的时候调用方法。下面是一个示例:<template><d......
  • 如何在不刷新页面的情况下更改Nuxt.js路由器的路由参数?
    要在不刷新页面的情况下更改Nuxt.js路由器的路由参数,你可以使用Nuxt.js提供的$router.push方法,并传递一个新的路由对象。下面是一个示例://使用$router.push更新路由参数this.$router.push({path:'/your-route-path',query:{param1:'value1',param2:'value2'......
  • 如何在Vue.js中添加headers(标头) 使用 axios,单独请求,所有请求 添加请求头
    如何在Vue.js中添加headers(标头)使用axios,单独请求,所有请求添加请求头Vue.js是一个流行的前端框架,它以其简单易用的API和高度可组合的架构而闻名。当你构建一个Web应用时,你通常会使用一个HTTP客户端来与API交互。该客户端可以是一个浏览器内部的XMLHttpRequest,也可以......