首页 > 其他分享 >从一组数组中,取出某个字段不同的100条数据

从一组数组中,取出某个字段不同的100条数据

时间:2022-09-29 10:59:01浏览次数:50  
标签:index return 数组 一组 item let key 100 keyIndex

背景:在开发一个项目时,需要展示某个市区的公示信息,后端返回了500条数据,500条数据中包含有9个不同的村镇,产品的意思是500条数据只取100条,但100条数据取不同村镇的。所以最开始的直接数组slice截取100个这个想法是不对的,因为可能截取到的是100条村镇一样的数据,因此封装了一个方法,去实现这个需要。

首先简单的看看效果:

    

 

 1 const lodash = require('lodash');
 2 function getList(Arr, groupKey, length) {
 3   let groupMap = lodash.groupBy(Arr, groupKey);
 4   let groupKeyList = Object.keys(groupMap);
 5   let keyIndex = {};
 6   let list = [];
 7   const getItem = index => {
 8     let key = groupKeyList[index];
 9     if (!key) return;
10     if (!keyIndex[key] && keyIndex[key] !== 0) {
11       keyIndex[key] = 0;
12     } else {
13       keyIndex[key]++;
14     }
15     let item = groupMap[key][keyIndex[key]];
16     let countTotal = Object.values(keyIndex).reduce((sum, one) => {
17       return (sum += one);
18     }, 0);
19     let listLength = Arr.length;
20     if (!item && countTotal >= listLength) {
21       return;
22     }
23     if (!item) {
24       index++;
25       if (index > groupKeyList.length - 1) {
26         index = 0;
27       }
28       return getItem(index);
29     }
30     return item;
31   };
32   for (var i = 0; i < length; i++) {
33     let index = i % groupKeyList.length;
34     let item = getItem(index);
35     if (!item) {
36       break;
37     }
38     list.push(item);
39   }
40   return list;
41 }
42 
43 
44 // 测试
45 let list = [
46   { name: 'A1', type: 'A' },
47   { name: 'A4', type: 'A' },
48   { name: 'B1', type: 'B' },
49 ];
50 let res = JSON.stringify(getList(list, 'type', 5), null, 4);
51 console.log(res);

 

标签:index,return,数组,一组,item,let,key,100,keyIndex
From: https://www.cnblogs.com/grow-up-up/p/16740665.html

相关文章

  • 将有序数组转换为二叉搜索树
    给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过......
  • 数据结构与算法(数组&二维数组)
    数组集合、列表和数组集合:一个或多个元素构成的整体,里面的元素类型不一定相同,且是无序的列表:又称线性列表,有顺序且长度是可变的,没有索引有顺序,可以增删改数组:列表的实......
  • JS对象数组使用IndexOf方法得到索引
    获得数组里某一个对象的索引的最佳方法是什么呢?比如如下场景:varhello={hello:'world',foo:'bar'};varqaz={hello:'stevie',foo:'baz'}......
  • WPF 给 Pen 的 DashStyle 设置 0 0 的虚线数组将会让渲染线程消耗大量 CPU 资源
    给WPF的Pen的DashStyle属性设置00的虚线,在绘制几何图形时,绘制的几何图形的尺寸将关联渲染线程所使用的CPU资源。大约在周长大于500时,将可以从任务管理器上看......
  • .NET教程 - 数组(Array)
    更新记录转载请注明出处:2022年9月29日发布。2022年9月28日从笔记迁移到博客。System.Array说明Array类型是所有一维和多维数组的基类System.Array类型实现了ILi......
  • el-table 处理表格数据中存在属性值为数组的情况
    当返回的数据类型如下:tableData:[{name:'张三',occupation:'经理',experiences:[{id:'123456',proje......
  • js判断数组的几种方法
    1.实例的__proto__属性非标准ie浏览器不支持letarr=[1,2,3];console.log('__proto__',arr.__proto__===Array.prototype)2.实例的constructorletarr=[1,2,3];......
  • JS实现数组元素位置交换
    /***数组元素交换位置*@param{array}arr数组*@param{number}index1添加项目的位置*@param{number}index2删除项目的位置*index1和index2分别是两......
  • leetcode977-有序数组的平方
    977.有序数组的平方原本直接暴力的做法没有利用到原数组是有序这个条件。这里直接把左边的绝对值大于右边的直接放到最后面,这样就减少很多不必要的操作。classSoluti......
  • PAT (Basic Level) Practice 1003 我要通过
            最近主要在浙大PATOJ平台刷题,本篇主要分析1003题的求解思路和Python实现。1题目介绍1.题目背景        读入的字符串满足下列条件,系统就输......