如何将对象数组操作为不同的键和值? [复制]

Posted

技术标签:

【中文标题】如何将对象数组操作为不同的键和值? [复制]【英文标题】:How to manipulate an array of object into a different key and value? [duplicate] 【发布时间】:2021-08-07 23:25:07 【问题描述】:

所以我有这个数组:

 [date: "5/7/2021", name: "bob",
 date: "5/6/2021", name: "bob",
 date: "5/6/2021", name: "bob",
 date: "5/6/2021", name: "bob",]

如何使数组变成:

[ "5/6/2021" : 3, // 3 because there are 3 data with 5/6/2021 date
  "5/7/2021" : 1] // 1 because there are 1 data with 5/7/2021 date

我的进步。 updatedSales 是数组名(编辑)

const temp = updatedSales.reduce((acc,  name, date ) => 
        acc[name] = acc[name] ||  name, dates: new Set(), totalSubmit: 0 ;
        acc[name].totalSubmit++;
        acc[name].dates.add(date);
        return acc;
    , );

    const result = Object.values(temp).map(( name, dates, totalSubmit ) => ( name, uniqueDate: dates.size, totalSubmit ));

 const updatedSales=[date: "5/7/2021", name: "bob",
 date: "5/6/2021", name: "bob",
 date: "5/6/2021", name: "bob",
 date: "5/6/2021", name: "bob",]

const temp = updatedSales.reduce((acc,  name, date ) => 
        acc[name] = acc[name] ||  name, dates: new Set(), totalSubmit: 0 ;
        acc[name].totalSubmit++;
        acc[name].dates.add(date);
        return acc;
    , );

    const result = Object.values(temp).map(( name, dates, totalSubmit ) => ( name, uniqueDate: dates.size, totalSubmit ));
    
console.log(result)

期望:

[ "5/6/2021" : 3, // 3 because there are 3 data with 5/6/2021 date
  "5/7/2021" : 1]

现在:

[name: "bob", uniqueDate: 3, totalSubmit: 36,
 name: "steve", uniqueDate: 12, totalSubmit: 116]

我想要的输出是不同的日期,而不是名称。所以它像“5/6/2021”而不是“bob”。

【问题讨论】:

请显示一些您尝试过的代码 所以要明确一点,updatedSales 是数组的名称。此代码用于其他目的,但这是我迄今为止的进展。 (编辑:我会把我的进度放在编辑中)@koralarts 看起来你基本上就在那里。你的实际问题是什么?在提出未来问题之前,请阅读how to ask。 “需要帮助”和“如何操作”是什么意思?你具体遇到什么问题?您看到哪些输出与您的期望不符,您遇到了哪些问题? 您目前正在按name 分组。尝试将.reduce()-callback 函数中的name 替换为date。那么你应该已经更接近你想要的了。 【参考方案1】:

只需对您的脚本进行几次触摸,您就会得到:

const updatedSales=[date: "5/7/2021", name: "bob",
 date: "5/6/2021", name: "bob",
 date: "5/6/2021", name: "bob",
 date: "5/6/2021", name: "bob",]

const temp = updatedSales.reduce((acc,  name, date ) => 
        acc[date] = acc[date] ||  date, dates: new Set(), totalSubmit: 0 ;
        acc[date].totalSubmit++;
        acc[date].dates.add(date);
        return acc;
    , );

    const result = Object.values(temp).map(( date, dates, totalSubmit ) => ( [date]: totalSubmit ) );
    
console.log(result)

或者,如果你真的想,你可以把它简化为“单线”:

const result = Object.entries(
    updatedSales.reduce((a,date) => 
      a[date] = (a[date] || 0) + 1;
      return a;  
    , )   ).map(([k,v])=> ( [k]:v ) );

new Set() 在这里并不是真正需要的。

【讨论】:

您好,非常感谢您的帮助,您介意检查一下吗:***.com/questions/67592355/…?对此,我真的非常感激。祝你有美好的一天!

以上是关于如何将对象数组操作为不同的键和值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中的对象添加新的键和值?

ng-repeat:访问对象数组中每个对象的键和值

如何在 Bash 中间接获取关联数组的键和值?

将两个数组(键和值)合并为一个对象[重复]

如何获取与php数组中的键和值相关的所有数组值

排序数组的键和值,键是Month