猿问

如何使用lodash在对象数组中计数

我有如下对象数组:


[

    {

        company: "CompanyName",

        id: "1",


        userProfile: {

            id: "2",            

            telephone: "",

            user: {

                email: "some_email",

                firstName: "Firstname",

                lastName: "Lastname",

                groups: [

                    {id: "2", name: "Manager"},

                    {id: "10", name: "Remarketing Manager"}

                ]

            }

        }

    },

    {

        company: "CompanyName",

        id: "2",


        userProfile: {

            id: "3",

            telephone: "",

            user: {

                email: "some_email",

                firstName: "Firstname",

                lastName: "Lastname",

                groups: [

                    {id: "1", name: "Seller"}

                ]

            }

        }

    },

    {

        company: "CompanyName",

        id: "3",


        userProfile: {

            id: "4",

            telephone: "",

            user: {

                email: "some_email",

                firstName: "Firstname",

                lastName: "Lastname",

                groups: [

                    {id: "2", name: "Manager"}

                ]

            }

        }

    }

]

我想依靠group name。


因此,我想要的结果是:


{

   "Manager": 2,

   "Seller": 1,

   "Remarketing Manager": 1,

}

我尝试用lodash countBy如下:


countBy(users, 'userProfile.user.groups.name');

但这是行不通的。

https://jsfiddle.net/suf3db4y/1/

呼唤远方
浏览 532回答 2
2回答

慕码人2483693

您可以使用减少let data = [{company: "CompanyName",id: "1",userProfile: {id: "2",telephone: "",user: {email: "some_email",firstName: "Firstname",lastName: "Lastname",groups: [{id: "2", name: "Manager"},{id: "10", name: "Remarketing Manager"}]}}},{company: "CompanyName",id: "2",userProfile: {id: "3",telephone: "",user: {email: "some_email",firstName: "Firstname",lastName: "Lastname",groups: [{id: "1", name: "Seller"}]}}},{company: "CompanyName",id: "3",userProfile: {id: "4",telephone: "",user: {email: "some_email",firstName: "Firstname",lastName: "Lastname",groups: [{id: "2", name: "Manager"}]}}}]let final = data.reduce((op,{userProfile:{user:{groups}}}) => {  groups.forEach(({name}) => {    op[name] = op[name] || 0    op[name]++  })  return op},{})console.log(final)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答