NodeJS 根据候选人的姓名递增嵌套数组中相似值的计数

iecba09b  于 2022-11-22  发布在  Node.js
关注(0)|答案(2)|浏览(121)

数据库中的数据

"data": [
    {
        "recruiter": "Venkatesh",
        "Total": [
            {
                "_id": "6368de60a13476be793928bb",
                "Status": "Client Submitted",
                "created_by": "Venkatesh"
            },
            {
                "_id": "636b71192fdb6190cd3ac4ab",
                "created_by": "Venkatesh",
                "Status": "Hired"
            },
            {
                "_id": "636b941b2fdb6190cd3acd15",
                "created_by": "Venkatesh",
                "Status": "Interview Scheduled"
            },
            {
                "_id": "636cd69d2fdb6190cd3b1be2",
                "created_by": "Venkatesh",
                "Status": "Client Submitted"
            },
            {
                "_id": "6372301975e1e77a9c3b5896",
                "Status": "Client Submitted",
                "created_by": "Venkatesh"
            },
            {
                "_id": "637761ed655965f094779322",
                "created_by": "Venkatesh",
                "Status": "Hired"
            },
            {
                "_id": "637b04f5655965f094779d40",
                "created_by": "Venkatesh",
                "Status": "Hired"
            }
        ]
    },
    {
        "recruiter": "Sudhir",
        "Total": [
            {
                "_id": "636b73f42fdb6190cd3ac765",
                "created_by": "Sudhir",
                "Status": "Client Submitted"
            },
            {
                "_id": "6371efd059a6b9f34f910527",
                "created_by": "Sudhir",
                "Status": "Hired"
            },
            {
                "_id": "63724e7c75e1e77a9c3b5cb7",
                "created_by": "Sudhir",
                "Status": "Client Submitted"
            },
            {
                "_id": "6373210c3182820f833b41a4",
                "created_by": "Sudhir",
                "Status": "Interview Scheduled"
            },
            {
                "_id": "637332423182820f833b493b",
                "created_by": "Sudhir",
                "Status": "Client Submitted"
            }
        ]
    },

我想要的回应

[
  {
    created_by: 'Venkatesh',
    Hired: 7,
    interviewscheduled: 7,
    clientsubmitted: 7
  },
  {
    created_by: 'Sudhir',
    Hired: 5,
    interviewscheduled: 5,
    clientsubmitted: 5
  },
]

代码

for(let i=0;i<=fil.length-1;i++){
        let x={hired:[],is:[],cs:[]}
    for(let j=0;j<=fil[i].Total.length-1;j++){
       
        
        if(fil[i].Total[j].Status="hired"){
           
          // h.push({hired:fil[i].Total[j].Status})
          x.hired.push("hired")
        }
        if(fil[i].Total[j].Status="Interview Scheduled"){
           
          // is.push({interviewscheduled:fil[i].Total[j].Status})
          x.is.push("is")
        }
        if(fil[i].Total[j].Status="Client Submitted"){
           
          // cs.push({cs:fil[i].Total[j].Status})
          x.cs.push("cs")
        }
} fil_arr.push({created_by:fil[i].recruiter,Hired:x.hired.length,interviewscheduled:x.is.length,clientsubmitted:x.cs.length})
    }

我要显示基于招聘人员的状态键的已计划、客户已提交、已聘用的面试总数。我无法找到正确的输出。我尝试使用for循环,但它不能给出正确的输出。请务必帮助我解决此问题。提前感谢。

y53ybaqx

y53ybaqx1#

status值到最终输出的property名称的简单Map可以使任务更容易。
我会这样尝试:

const data = [ { recruiter: "Venkatesh", Total: [ { _id: "6368de60a13476be793928bb", Status: "Client Submitted", created_by: "Venkatesh", }, { _id: "636b71192fdb6190cd3ac4ab", created_by: "Venkatesh", Status: "Hired", }, { _id: "636b941b2fdb6190cd3acd15", created_by: "Venkatesh", Status: "Interview Scheduled", }, { _id: "636cd69d2fdb6190cd3b1be2", created_by: "Venkatesh", Status: "Client Submitted", }, { _id: "6372301975e1e77a9c3b5896", Status: "Client Submitted", created_by: "Venkatesh", }, { _id: "637761ed655965f094779322", created_by: "Venkatesh", Status: "Hired", }, { _id: "637b04f5655965f094779d40", created_by: "Venkatesh", Status: "Hired", }, ], }, { recruiter: "Sudhir", Total: [ { _id: "636b73f42fdb6190cd3ac765", created_by: "Sudhir", Status: "Client Submitted", }, { _id: "6371efd059a6b9f34f910527", created_by: "Sudhir", Status: "Hired", }, { _id: "63724e7c75e1e77a9c3b5cb7", created_by: "Sudhir", Status: "Client Submitted", }, { _id: "6373210c3182820f833b41a4", created_by: "Sudhir", Status: "Interview Scheduled", }, { _id: "637332423182820f833b493b", created_by: "Sudhir", Status: "Client Submitted", }, ], }, ];

const StatusMap = {
  "Client Submitted": "clientsubmitted",
  "Interview Scheduled": "interviewscheduled",
  Hired: "Hired",
};

const output = data.map(({ recruiter, Total }) => {
  return {
    created_by: recruiter,
    ...Total.reduce(
      (prev, curr) => {
        prev[StatusMap[curr.Status]] += 1;
        return prev;
      },
      { Hired: 0, interviewscheduled: 0, clientsubmitted: 0 }
    ),
  };
});

console.log(output);

注意:有时最好使用Array.prototype.map()Array.prototype.reduce(),如数组内置函数。

xytpbqjk

xytpbqjk2#

以下是使用Map的解决方案:

const mapUser = new Map();
const keyValue = {
  "Client Submitted": "clientsubmitted",
  "Interview Scheduled": "interviewscheduled",
  "Hired": "Hired"
}
data.forEach(recruiter => {
    recruiter['Total'].forEach(user => {
    if (mapUser.has(user.created_by)) {
        const value = mapUser.get(user.created_by)[keyValue[user["Status"]]]
        mapUser.get(user.created_by)[keyValue[user["Status"]]] = (value || 0) + 1
    } else {
        mapUser.set(user.created_by, {[keyValue[user["Status"]]]: 1})
    }
  })
})

const result = Array.from(mapUser).map(([k,v]) => {
    return {created_by: k, ...v}
})

注意,您应该考虑协调属性大小写,例如所有camelCase或snake_case。
此外,一旦在上面的招聘人员属性中获得信息,就可以复制属性created_by。

相关问题