JavaScript 对一系列对象进行分组

JavaScript group a series of objs

我有以下代码,其中我有一组 obj b 是在 a 中由 elements 定义的对它们进行分组的方式。

我对如何去做有些疑惑。 例如,滚动 ab 是否正确?

你能帮帮我吗?

const a = [{
    _id: 0,
    elements: ['aasa', 'cccx', 'zzzx', 'sd']
  },
  {
    _id: 1,
    elements: ['bb', 'xx']
  }
];

const b = [{
    _id: 'aasa',
    info: "sssas"
  },
  {
    _id: 'bb'
  },
  {
    _id: 'zzzx',
    info: "ssss"
  },
  {
    _id: 'cccx',
    info: "sss"
  },
  {
    _id: 'xx'
  }
];

// result
[
  [{
      _id: 'aasa',
      info: "sssas"
    },
    {
      _id: 'zzzx',
      info: "ssss"
    },
    {
      _id: 'cccx',
      info: "sss"
    }
  ],
  [{
      _id: 'bb'
    },
    {
      _id: 'xx'
    }
  ]
];

c = a.map(el => el.elements)


const p = b
  //.map(el => el.elements)
  .reduce(function(prev, curr) {
    //if
    prev.push(curr);
    return prev;
  }, []);

//console.log("End",p)

你可以先把b改成一个查找对象(这里我用了一个Map),其中每个id都是一个指向对象本身的key:

// Transform `b` into a Map of the form:
Map {
  'aasa' => {
    _id: 'aasa',
    info: "sssas"
  },
  'bb' => {
    _id: 'bb'
  }
  // ... etc ...
}

然后,对于 a 中的每个对象,您可以映射 elements 数组,并使用该对象的 id 作为查找对象中的键来获取与该对象关联的对象ID。在执行映射之前,您可以先使用映射上的 .has 过滤查找 table 中不存在的任何键(即:id):

const a = [{ _id: 0, elements: ['aasa', 'cccx', 'zzzx', 'sd'] }, { _id: 1, elements: ['bb', 'xx'] } ];
const b = [{ _id: 'aasa', info: "sssas" }, { _id: 'bb' }, { _id: 'zzzx', info: "ssss" }, { _id: 'cccx', info: "sss" }, { _id: 'xx' } ];

const lut = new Map(b.map(obj => [obj._id, obj]));
const res = a.map(({elements}) => elements.filter(key => lut.has(key)).map(key => lut.get(key)));
console.log(res);

这应该有效

const c = a.map(el1 => {
   return b.filter(el2 => {
      return el1.elements.includes(el2._id)
   })
});