微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 ._groupBy 格式化复杂的数组

如何解决如何使用 ._groupBy 格式化复杂的数组

我的数组看起来像,但包含 1000 多个对象:

    data = {
  0: {
    code: '3019476',_id: '60033f61-8a4e-4622-9731-decd07bc44e1',vendor: 'DKNY',tags: [
      { type: 1,label: 'dsfs' },{ type: 2,label: 'thisOne' },{ type: 3,label: 'sdas' },],},1: {
    code: '3019475',_id: '60033f61-8a4e-4622-9731-decd07bc44e0',label: 'sdfsd' },label: 'anotherone' },2: {
    code: '3019474',_id: '60033f61-8a4e-4622-9731-decd07bc44e9',label: 'gregf' },};

我希望这是输出

0: {title: "thisOne",data: Array(2)"}
1: {title: "anotherone",data: Array(1)"}

所以我想过滤并计算有多少个对象包含不同的 tag[1].label,将完整的项目数据保存在结果中的 'data' 中。

我所有的想法都失败了,所以我真的需要你的帮助

解决方法

数据中有很多语法错误,修复它们,它应该可以工作。请参阅下面的代码片段。

注意:对象中的键/值对应该用逗号分隔,dsfsthisOne sdas 应该是有效的变量或字符串。

data = {
  0: {
    code: '3019476',_id: '60033f61-8a4e-4622-9731-decd07bc44e1',vendor: 'DKNY',tags: [
      { type: 1,label: 'dsfs' },{ type: 2,label: 'thisOne' },{ type: 3,label: 'sdas' },],},1: {
    code: '3019475',_id: '60033f61-8a4e-4622-9731-decd07bc44e0',label: 'sdfsd' },label: 'anotherOne' },2: {
    code: '3019474',_id: '60033f61-8a4e-4622-9731-decd07bc44e9',label: 'gregf' },};

console.log(data[0].tags[1].label)

,

你不需要 lodash。您可以使用普通的 javascript。

const data= [
{code: "3019476",_id: "60033f61-8a4e-4622-9731-decd07bc44e1",vendor: "DKNY",tags: [{type: 1,label: 'dsfs'},{type: 2,label: 'thisOne'},{type: 3,label: 'sdas'}]},{code: "3019475",_id: "60033f61-8a4e-4622-9731-decd07bc44e0",label: 'sdfsd'},label: 'anotherOne'},label: 'sdfsd'}]},{code: "3019474",_id: "60033f61-8a4e-4622-9731-decd07bc44e9",label: 'gregf'},label: 'gregf'}]}]

const newData = data.map(d => { 
  let result = {};
  result.title = d.tags.find(tag => tag.type === 2).label;
  result.data = d.tags.filter(tag => tag.type === 2); 
  return result;
});

console.log(newData);

P.S.:此代码段考虑到可以将多个 tagType 包含到数据数组中,并且第一个找到的将用作标题。 如果这不是您想要的,那么问题应该更清楚。

,

我怀疑您正在寻找带有 groupBy property pathiteratee shorthand

import { groupBy } from 'underscore';

groupBy(data,['tags',1,'label']);
// { thisOne: [Object,Object],//   anotherOne: [Object]
// }

这会生成一个以标签为键、以组为值的对象。从这里开始,可以很容易地以您的问题的示例输出的确切形状获得它,例如使用 chainmap

import { chain } from 'underscore';

chain(data)
    .groupBy(['tags','label'])
    .map((data,title) => ({data,title}))
    .value();
// [ { title: 'thisOne',data: [Object,Object] },//   { title: 'anotherOne',data: [Object] }
// ]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。