array group by key javascript

calendar

Array.reduce

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce


result = array.reduce((h, obj) => Object.assign(h, { [obj.key]:( h[obj.key] || [] ).concat(obj) }), {}) var cars = [{ make: 'audi', model: 'r8', year: '2012' }, { make: 'audi', model: 'rs5', year: '2013' }, { make: 'ford', model: 'mustang', year: '2012' }, { make: 'ford', model: 'fusion', year: '2015' }, { make: 'kia', model: 'optima', year: '2012' }], result = cars.reduce(function (r, a) {
r[a.make] = r[a.make] || [];
r[a.make].push(a);
return r;
}, Object.create(null)); console.log(result);

groupBy

https://learnwithparam.com/blog/how-to-group-by-array-of-objects-using-a-key/

const groupBy = (array, key) => {
return array.reduce((result, currentValue) => {
(result[currentValue.color] = result[currentValue.color] || []).push(
currentValue
);
console.log(result);
return result;
}, {});
};

// this step of code can be restructured to multiple lines, see below for the multi line code
(result[currentValue[key]] = result[currentValue[key]] || []).push(
currentValue
); // This is how the above code in multiple line
if (!result[currentValue[key]]) {
result[currentValue[key]] = [];
}
result[currentValue[key]].push(currentValue);

_.groupBy

https://lodash.com/docs/4.17.2#groupBy




OK



const log = console.log;

const events = [
{
"id": 210404,
"productId": 13602,
"activityEventId": 8623896,
"ticketCategoryId": 5246754,
"ticketGroupId": 81798755,
"start": 1617532218562,
"end": 1617532218562,
"ticketsNumber": 100,
"lowPrice": 127.00,
"status": 0,
"priceLowest": false,
"hasTicket": true,
"availableNumbers": [
1,
2,
3,
4,
5,
6
]
},
{
"id": 210403,
"productId": 13602,
"activityEventId": 7623896,
"ticketCategoryId": 5246754,
"ticketGroupId": 71798755,
"start": 1617432218562,
"end": 1617432218562,
"ticketsNumber": 100,
"lowPrice": 127.00,
"status": 0,
"priceLowest": false,
"hasTicket": true,
"availableNumbers": [
1,
2,
3,
4,
5,
6
]
},
{
"id": 191837,
"productId": 13602,
"activityEventId": 1623896,
"ticketCategoryId": 5246754,
"ticketGroupId": 61798755,
"start": 1585497600000,
"end": 1585497600000,
"ticketsNumber": 100,
"lowPrice": 127.00,
"status": 0,
"priceLowest": false,
"hasTicket": true,
"availableNumbers": [
1,
2,
3,
4,
5,
6
]
},
{
"id": 191812,
"productId": 13602,
"activityEventId": 1623891,
"ticketCategoryId": 5246729,
"ticketGroupId": 61798730,
"start": 1585584000000,
"end": 1585584000000,
"ticketsNumber": 100,
"lowPrice": 127.00,
"status": 0,
"priceLowest": false,
"hasTicket": true,
"availableNumbers": [
1,
2,
3,
4,
5,
6
]
},
{
"id": 191701,
"productId": 13602,
"activityEventId": 5623852,
"ticketCategoryId": 5246618,
"ticketGroupId": 51798619,
"start": 1585670400000,
"end": 1585670400000,
"ticketsNumber": 100,
"lowPrice": 127.00,
"status": 0,
"priceLowest": false,
"hasTicket": true,
"availableNumbers": [
1,
2,
3,
4,
5,
6
]
},
{
"id": 191749,
"productId": 13602,
"activityEventId": 4623876,
"ticketCategoryId": 5246666,
"ticketGroupId": 41798667,
"start": 1585756800000,
"end": 1585756800000,
"ticketsNumber": 100,
"lowPrice": 127.00,
"status": 0,
"priceLowest": false,
"hasTicket": true,
"availableNumbers": [
1,
2,
3,
4,
5,
6
]
},
{
"id": 191737,
"productId": 13602,
"activityEventId": 3623870,
"ticketCategoryId": 5246654,
"ticketGroupId": 31798655,
"start": 1585843200000,
"end": 1585843200000,
"ticketsNumber": 100,
"lowPrice": 127.00,
"status": 0,
"priceLowest": false,
"hasTicket": true,
"availableNumbers": [
1,
2,
3,
4,
5,
6
]
},
{
"id": 262539,
"productId": 13602,
"activityEventId": 1651249,
"ticketCategoryId": 5319475,
"ticketGroupId": 11872015,
"start": 1588089600000,
"end": 1588089600000,
"ticketsNumber": 100,
"lowPrice": 127.00,
"status": 0,
"priceLowest": false,
"hasTicket": true,
"availableNumbers": [
1,
2,
3,
4,
5,
6
]
}
]; // log(`events`, events) const dateShaper = (timestamp = ``) => {
const date = new Date(timestamp)
const dateString = date.toLocaleDateString();
const timeString = date.toLocaleTimeString();
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const weekDays = ["日", "一", "二", "三", "四", "五", "六"];
const weekDay = weekDays[date.getDay()];
return {
dateString,
timeString,
year,
month,
day,
weekDay,
};
} const thisYear = new Date().getFullYear(); const tabs = events.map((obj, i) => {
const {
start,
} = obj;
const date = new Date(start);
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const tabName = thisYear === year ? `${month}月` : `${year}年${month}月`;
// const tabGroupKey = thisYear !== year ? `${year}_` + `${month}`.padStart(2, `0`) : `${month}`.padStart(2, `0`);
const tabGroupKey = `${year}_` + `${month}_`.padStart(3, `0`) + `${day}`.padStart(2, `0`);
// const tabGroupKey = `${year}_${month}_${day}`;
return {
...obj,
tabName,
tabGroupKey,
};
}); // log(`tabs`, tabs) const sortedArray = tabs.sort((a, b) => a.start > b.start ? 1 : -1); // log(`sortedArray`, sortedArray) // const groupBy = (array, key) => {
// return array.reduce((result, currentValue) => {
// result[currentValue.key] = result[currentValue.key] || [];
// result[currentValue.key].push(
// currentValue,
// );
// // console.log(result);
// return result;
// }, {});
// }; // const groupBy = (array, key) => {
// return array.reduce((result, currentValue) => {
// result[currentValue.key] = result[currentValue.key] || [];
// result[currentValue.key].push(
// currentValue,
// );
// // console.log(result);
// return result;
// }, []);// array
// }; const groupBy = (array, key) => array.reduce((h, obj) => Object.assign(h, { [obj[key]]:( h[obj[key]] || [] ).concat(obj) }), []);
// const groupBy = (array, key) => array.reduce((h, obj) => Object.assign(h, { [obj[key]]:( h[obj[key]] || [] ).concat(obj) }), {});
// const groupBy = (array, key) => array.reduce((h, obj) => Object.assign(h, { [obj.key]:( h[obj.key] || [] ).concat(obj) }), {}); //
const groupedArray = groupBy(sortedArray, `tabName`);
// const groupedArray = groupBy(sortedArray, `tabGroupKey`); log(`groupedArray`, groupedArray) // log(`groupedArray[0]`, groupedArray[0]) Object.keys(groupedArray).map((month, i) => {
log(`tab month`, month, i)
}) Object.values(groupedArray).map((month, i) => {
log(`tab month`, month, i)
}) Object.entries(groupedArray).map((month, i) => {
const {
// key,
// value,
} = month;
log(`tab month key`, month[0], i)
log(`tab month value`, month[1], i)
})


array group by key javascript的更多相关文章

  1. how to group date array by month in javascript

    how to group date array by month in javascript https://stackoverflow.com/questions/14446511/most-eff ...

  2. 谷歌IAP:skusBundle array associated with key ITEM_ID_LIST cannot contain more than 20 items.

    这几天在接谷歌的支付,在拉谷歌商品列表的时候转菊花,长时间不返回(querySkuDetails),一开始以为因为IAP有key不对导致的,查了下发现没有问题. 再看logcat,发现了这行: Inp ...

  3. [JavaScript] Array.prototype.reduce in JavaScript by example

    Let's take a closer look at using Javascript's built in Array reduce function. Reduce is deceptively ...

  4. ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展

    关于ExtJS对javascript中的Array的扩展.能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 因为 ...

  5. 复习 Array,重学 JavaScript

    1 数组与对象 在 JavaScript 中,一个对象的键只能有两种类型:string 和 symbol.下文只考虑键为字符串的情况. 1.1 创建对象 在创建对象时,若对象的键为数字,或者由 字母+ ...

  6. ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展(实例)

    (1)clean var arr = [1,2,null,3,'']; alert(Ext.Array.clean(arr)); //clean的对象:(value === null) || (val ...

  7. javascript数组去重 String字符串去掉两端空格 javascript Array二分法排序 比较 javascript 求和

    通过原形添加方法: ==================数组去重(对象去重法)======================= Array.prototype.unique=function(){ va ...

  8. JavaScript求数组Array的并集(javascript面试常见题目)

    var Utils = { joinArray:function(source,target){ for(var i = 0;i<source.length;i++){ var oa = sou ...

  9. Azure DevOps的variable group实现array和hashtable参数的传递

    Azure Devops中的variable group建议或者只能(?)添加string类型的value.基于此我们想在variable group实现array或者hashtable的传递的核心思 ...

随机推荐

  1. 获取控制台的错误信息 onerror

    js 获取控制台的错误信息 https://www.bbsmax.com/A/Vx5ML2NmJN/ <!DOCTYPE html> <html lang="en" ...

  2. vue-router实现路由懒加载( 动态加载路由 )

    三种方式第一种:vue异步组件技术 ==== 异步加载,vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件.第二种:路由懒加载 ...

  3. 洛谷P1858

    \({\mathcal{For}}\) \({\mathcal{we}\ }\)\({\mathcal{live}\ }\)\({\mathcal{by}\ }\)\({\mathcal{faith} ...

  4. 【译】Async/Await(四)—— Pinning

    原文标题:Async/Await 原文链接:https://os.phil-opp.com/async-await/#multitasking 公众号: Rust 碎碎念 翻译 by: Praying ...

  5. react空标签之The React Fragment

    如何使用React.Fragment创建不可见的HTML标签 在研究Ant Design Pro项目中,在登录模块中,有React.Fragment的实际应用 接下来先看一个小demo,将返回值包装在 ...

  6. 文本处理三剑客简介(grep、awk、sed)

    本章内容: 命令 描述 awk 支持所有的正则表达式 sed 默认不支持扩展表达式,加-r 选项开启 ERE,如果不加-r 使用花括号要加转义符\{\} grep 默认不支持扩展表达式,加-E 选项开 ...

  7. 1.DHCP的定义

    1.Dynamic Host Configuration Protocol (DHCP)是一种客户端/服务器协议,可自动向Internet协议(IP)主机提供其IP地址和其他相关配置信息,例如子网掩码 ...

  8. Codeforces Round #636div3 D. Constant Palindrome Sum (划分区间,差分)

    题意:给你一个长度为偶数n的数组,每次可以将一个元素修改为不大于k的值,要求每个a[i]+a[n-i+1]都相等,求最少操作多少次 题解:假设每一对的和都为sum,小的记为mn,大的记为mx;     ...

  9. B-number HDU - 3652

    题意: 找出区间[li,ri]有多少个符合要求的数: 1.这个数里面有13 2.这个数可以被13整除 题解: 这个题目和之前的有点不一样就是这个题目要我们求包含13的(之前做过的都是不包含).但是都差 ...

  10. GO - 高级编程

    https://books.studygolang.com/gopl-zh/ https://chai2010.cn/advanced-go-programming-book/