为了账号安全,请及时绑定邮箱和手机立即绑定

聚合 JavaScript 集合

聚合 JavaScript 集合

隔江千里 2023-07-29 16:39:47
我有一个集合,其中我必须仅使用 javascript 来使用聚合。我已经使用 Lodash 库尝试过一些事情,但没有成功。如果你能指导我以某种方式对集合进行分组,”我认为这应该可以解决。var sample = [        {                       "DESCRIPTOR": "HAPPY",            "DESCRIPTOR_ID": 400001,            "QUESTION_ID": "A_QUES_1",            "CHOICE": "A",            "SCORE": 1,            "__v": 0        },        {                       "DESCRIPTOR": "HAPPY",            "DESCRIPTOR_ID": 400001,            "QUESTION_ID": "A_QUES_2",            "CHOICE": "B",            "SCORE": 2,            "__v": 0        },{                       "DESCRIPTOR": "SAD",            "DESCRIPTOR_ID": 400002,            "QUESTION_ID": "B_QUES_1",            "CHOICE": "A",            "SCORE": 2,            "__v": 0        },        {                       "DESCRIPTOR": "SAD",            "DESCRIPTOR_ID": 400002,            "QUESTION_ID": "B_QUES_2",            "CHOICE": "B",            "SCORE": 2,            "__v": 0        }    ]我期望像下面这样的东西, result = [{"DESCRIPTOR": "HAPPY", "TOTAL_SCORE":3}, {"DESCRIPTOR": "SAD", "TOTAL_SCORE":4}]你能帮我只用 JavaScript 编写这段代码吗? 谢谢
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您可以使用数组归约方法,

let result = sample.reduce((prev, curr) => {

   const descriptorName = curr.DESCRIPTOR;

   const index = prev.findIndex((item) => item.DESCRIPTOR === descriptorName);

   if(index > -1) {

      prev[index].SCORE += curr.SCORE;

   } else {

      prev.push({'DESCRIPTOR': descriptorName, 'SCORE': curr.SCORE})

   }

   return prev;

}, []);


console.log(result);


查看完整回答
反对 回复 2023-07-29
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

下面的代码根据 DESCRIPTOR_ID 对对象进行分组。首先使用方法遍历数组Array.prototype.reduce(),获取descriptor_id并将其作为key,并统计每个key的总分。最后使用方法获取值Object.values()。


const sample = [

  {

    DESCRIPTOR: 'HAPPY',

    DESCRIPTOR_ID: 400001,

    QUESTION_ID: 'A_QUES_1',

    CHOICE: 'A',

    SCORE: 1,

    __v: 0,

  },

  {

    DESCRIPTOR: 'HAPPY',

    DESCRIPTOR_ID: 400001,

    QUESTION_ID: 'A_QUES_2',

    CHOICE: 'B',

    SCORE: 2,

    __v: 0,

  },

  {

    DESCRIPTOR: 'SAD',

    DESCRIPTOR_ID: 400002,

    QUESTION_ID: 'B_QUES_1',

    CHOICE: 'A',

    SCORE: 2,

    __v: 0,

  },

  {

    DESCRIPTOR: 'SAD',

    DESCRIPTOR_ID: 400002,

    QUESTION_ID: 'B_QUES_2',

    CHOICE: 'B',

    SCORE: 2,

    __v: 0,

  },

];


const ret = Object.values(

  sample.reduce((prev, c) => {

    const p = prev;

    const key = c.DESCRIPTOR_ID;

    if (!p[key]) p[key] = { DESCRIPTOR: c.DESCRIPTOR, TOTAL_SCORE: c.SCORE };

    else p[key].TOTAL_SCORE += c.SCORE;

    return p;

  }, {})

);

console.log(ret);


查看完整回答
反对 回复 2023-07-29
  • 2 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信