首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Javascript类型记录中筛选的数据中添加动态数组对象

从Javascript类型记录中筛选的数据中添加动态数组对象
EN

Stack Overflow用户
提问于 2022-02-03 12:48:28
回答 3查看 74关注 0票数 1

我有一个动态数据,我需要从每年排序和过滤,数据如下

代码语言:javascript
复制
years: ['2018', '2019', '2020', '2021', '2022']

[
 [{name: 'event_name1', created_at: 2021-01-12 11:25:0}, {name: 'event_name1', created_at: 2021-01-14 11:25:0}, {name: 'event_name1', created_at: 2020-01-12 11:25:0}, {name: 'event_name1', created_at: 2019-11-12 11:25:0}],

 [{name: 'event_name2', created_at: 2018-01-12 11:25:0}, {name: 'event_name2', created_at: 2018-01-12 11:25:0}, {name: 'event_name2', created_at: 2021-01-12 11:25:0}, {name: 'event_name2', created_at: 2021-11-12 11:25:0},{name: 'event_name2', created_at: 2022-01-12 11:25:0}]
 
... event_name3
]

(我必须澄清,这些年份以前是根据数据资料计算的)。

我尝试过几种方法,使用映射和过滤方法以及for结构,但是,我无法过滤这样的信息。这就是我想要过滤的数据

代码语言:javascript
复制
[
{element: 'event_name1',data:[2018:0,2019:1,2020:1,2021:1,2022:0]},
{element: 'event_name2',data:[2018:2,2019:0,2020:0,2021:1,2022:1]}
]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-03 13:39:15

没有reduce。但是mapsfilter

我假设预期的数据属性包含文本值。

代码语言:javascript
复制
const data = [[ { name: 'event_name1', created_at: '2021-01-12 11:25:0' },{ name: 'event_name1', created_at: '2021-01-14 11:25:0' },{ name: 'event_name1', created_at: '2020-01-12 11:25:0' },{ name: 'event_name1', created_at: '2019-11-12 11:25:0' }],[{ name: 'event_name2', created_at: '2018-01-12 11:25:0' },{ name: 'event_name2', created_at: '2018-01-12 11:25:0' },{ name: 'event_name2', created_at: '2021-01-12 11:25:0' },{ name: 'event_name2', created_at: '2021-11-12 11:25:0' },{ name: 'event_name2', created_at: '2022-01-12 11:25:0' }]];

const years = ['2018', '2019', '2020', '2021', '2022'];

const result = data.map((arr) => {
   const [{ name: element }] = arr;
   const data = years.map((year) => {
      const count = arr.filter(({ created_at }) => created_at.slice(0, 4) === year).length;
      return `${year}:${count}`;
   });
   
   return { element, data };
})


console.log(result);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN

Stack Overflow用户

发布于 2022-02-03 12:51:43

看起来像一个使用reduce方法的场景。迭代事件的数组,并在累加器中创建/修改适当的元素。

票数 0
EN

Stack Overflow用户

发布于 2022-02-03 13:07:13

给你,我的朋友

代码语言:javascript
复制
const baseYearsInstances = {
  '2018': 0,
  '2019': 0,
  '2020': 0,
  '2021': 0,
  '2022': 0,
};

const test = [
  [
    { name: 'event_name1', created_at: '2021-01-12 11:25:0' },
    { name: 'event_name1', created_at: '2021-01-14 11:25:0' },
    { name: 'event_name1', created_at: '2020-01-12 11:25:0' },
    { name: 'event_name1', created_at: '2019-11-12 11:25:0' },
  ],

  [
    { name: 'event_name2', created_at: '2018-01-12 11:25:0' },
    { name: 'event_name2', created_at: '2018-01-12 11:25:0' },
    { name: 'event_name2', created_at: '2021-01-12 11:25:0' },
    { name: 'event_name2', created_at: '2021-11-12 11:25:0' },
    { name: 'event_name2', created_at: '2022-01-12 11:25:0' },
  ],
];

const eventToDate = (event) => {
  const dataNotSorted = event.map((eventDate) => {
    const year = new Date(eventDate.created_at).getFullYear();
    return year;
  });

  const data = dataNotSorted.reduce(function (acc, curr) {
    return acc[curr] ? ++acc[curr] : (acc[curr] = 1), acc;
  }, {});

  return { element: event[0]?.name, data: { ...baseYearsInstances, ...data } };
};

const result = test.map(eventToDate);

console.log(result);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70971591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档