简体   繁体   English

将数组值推送到 object

[英]push the array value to object

I have a nested array.我有一个嵌套数组。 I want to take values from array and push to new single object.我想从数组中获取值并推送到新的单个 object。 should read take the _id as object key and category array field should be value for _id应该读取 _id 作为 object 键和类别数组字段应该是 _id 的值

const Ll = [
  {
    _id: 'milk',
    category: [
      [
        {
          name: 'Alfred',
          job: 'manager'
        },
        {
          name: 'Mark',
          job: 'manager'
        }
      ]
    ]
  },
  {
    _id: 'grocery',
    category: [
      [
        {
          name: 'William',
          job: 'manager'
        }
      ]
    ]
  }
]

I want object like so,我想要这样的 object,

const obj = {
  milk: [
    {
      name: 'Alfred',
      job: 'manager'
    },
    {
      name: 'Mark',
      job: 'manager'
    }
  ],
  grocery: [
    {
      name: 'William',
      job: 'manager'
    }
  ]
}

Is possible to do Thanks!可以吗 谢谢!

You could do it using Array.prototype.reduce() method.你可以使用Array.prototype.reduce()方法来做到这一点。 Traverse the array and group it by _id .遍历数组并按_id对其进行分组。

 const data = [ { _id: 'milk', category: [ [ { name: 'Alfred', job: 'manager', }, ], ], }, { _id: 'grocery', category: [ [ { name: 'William', job: 'manager', }, ], ], }, { _id: 'milk', category: [ [ { name: 'Mark', job: 'manager', }, ], ], }, ]; const ret = data.reduce((prev, c) => { const p = prev; const key = c._id; p[key] = p[key]?? []; p[key].push(...c.category.flat()); return p; }, {}); console.log(ret);

ES6: ES6:

 const data = [ { _id: 'milk', category: [ [ { name: 'Alfred', job: 'manager', }, ], ], }, { _id: 'grocery', category: [ [ { name: 'William', job: 'manager', }, ], ], }, { _id: 'milk', category: [ [ { name: 'Mark', job: 'manager', }, ], ], }, ]; const ret = data.reduce((prev, c) => { const p = prev; const key = c._id; p[key] = p[key] || []; p[key].push(...c.category.reduce((acc, val) => acc.concat(val), [])); return p; }, {}); console.log(ret);

You could use reduce with empty object accumulated您可以使用reduce和空 object 累积

Technique combined with:技术结合:

 const data = [ { _id: "milk", category: [ [ { name: "Alfred", job: "manager", }, { name: "Mark", job: "manager", }, ], ], }, { _id: "grocery", category: [ [ { name: "William", job: "manager", }, ], ], }, ]; const res = data.reduce( (acc, { _id, category }) => ({...acc, [_id]: category.flat() }), {} ); console.log(res);

Here is solution for you.这是给你的解决方案。

const obj = {};
data.forEach(d => {
    const categories = d.category.reduce((a, v) => a.concat(v), []);
    obj[d._id] = obj[d._id] ? [...obj[d._id], ...categories] : [...categories];
});

console.log(obj);
const keys = [...new Set(data.map(item => item._id))];

const newObj = keys.reduce((acc, curr) => {
  const value = data.filter(({ _id }) => _id === curr).map(({ category }) => {
    return {
      ...category[0][0]
    }
  });

  return {
    ...acc,
    [curr]: value
  }
}, {});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM