簡體   English   中英

將數組值推送到 object

[英]push the array value to object

我有一個嵌套數組。 我想從數組中獲取值並推送到新的單個 object。 應該讀取 _id 作為 object 鍵和類別數組字段應該是 _id 的值

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

我想要這樣的 object,

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

可以嗎 謝謝!

你可以使用Array.prototype.reduce()方法來做到這一點。 遍歷數組並按_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:

 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);

您可以使用reduce和空 object 累積

技術結合:

 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);

這是給你的解決方案。

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