求助,nodejs如何遍历产生汇总型的数据结果?

有一组数据,结构如下:

{ id: 4335,
  uid: 43,
  card: { id: 27, name: '啊啊', pinyinIndex: 'a' } }
{ id: 4336,
  uid: 43,
  card: { id: 28, name: '旺旺', pinyinIndex: 'w' } }
{ id: 4293,
  uid: 43,
  card: { id: 29, name: '123', pinyinIndex: '1' } }
{ id: 4337,
  uid: 43,
  card: { id: 42, name: '1122 ', pinyinIndex: '1' } }

希望得到根据字段 pinyinIndex 汇总的结果,类似这样的结果:

{
    [
        pinyinIndex: 1,
            {
            id: 4337,
            uid: 43,
            card: { id: 42, name: '1122 ', pinyinIndex: '1' }
            },
            {
            id: 4293,
            uid: 43,
            card: { id: 42, name: '123 ', pinyinIndex: '1' }
            },

    ],
    [
        pinyinIndex: a,
        {
            id: 4335,
            uid: 43,
            card: { id: 27, name: '啊啊', pinyinIndex: 'a' } 
            },
    ]
}

目前用了一个map的方式,但是map不能同时对一个键赋值两次,所以出来的结果总是只有一个值:

const sortArr = new Map([
        [ 'a', '' ],
        [ '1', '' ],
        [ 'w', '' ],
      ]);

      x.forEach(function(my_card) {
        let temp = new Map();
        for (const key of sortArr.keys()) {
          if (my_card.dataValues.card.pinyinIndex == key) {
            sortArr.set(my_card.dataValues.card.pinyinIndex, temp.set(JSON.stringify(Sequelize.getValues(my_card.dataValues))));
          }
        }}, this);

求高人帮忙解一下,万分感激。

阅读 2.8k
2 个回答
var obj = [{id: 4335,
  uid: 43,
  card: { id: 27, name: '啊啊', pinyinIndex: 'a' } },
{ id: 4336,
  uid: 43,
  card: { id: 28, name: '旺旺', pinyinIndex: 'w' } },
{ id: 4293,
  uid: 43,
  card: { id: 29, name: '123', pinyinIndex: '1' } },
{ id: 4337,
  uid: 43,
  card: { id: 42, name: '1122 ', pinyinIndex: '1' } }];

  var arr = obj.reduce((arr,k)=>{
    !arr.some((v)=>v.pinyinIndex == k.card.pinyinIndex&&v.data.push(k))&&arr.push({pinyinIndex:k.card.pinyinIndex,data:[k]});
    return arr;
  },[])
  console.log(arr)//格式大概:[{"pinyinIndex":"a","data":[{"id":4335,"uid":43,"card":{"id":27,"name":"啊啊","pinyinIndex":"a"}}]}]

谢谢谢谢。。。

后来我写了一个两个map然后foreach的,因为要满足不是英文字符开头的把首字定义成“#”但是执行效率非常低。

     const sortArr = new Map([
        [ 'a', '' ],
        [ 'w', '' ],
      ]);
      // console.log(sortArr);


      for (const a of sortArr.keys()) {
        const temp = new Map();
        const Unpy = new Map();

        collectionInfo.forEach(function(card) {
          if (card.dataValues.card.dataValues.pinyinIndex === a) {
            temp.set(card.dataValues.card.dataValues);
            sortArr.set(a, temp.keys());
          }
          if (!sortArr.has(card.dataValues.card.dataValues.pinyinIndex)) {
            Unpy.set(card.dataValues.card.dataValues);
            sortArr.set('#', Unpy.keys());
            console.log(a);
          }

        }, this);
      }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题