第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

根據(jù)特定字段對(duì)對(duì)象數(shù)組進(jìn)行分組

根據(jù)特定字段對(duì)對(duì)象數(shù)組進(jìn)行分組

慕桂英3389331 2023-09-14 22:02:35
我有一系列對(duì)象。我想按特定領(lǐng)域?qū)λ鼈冞M(jìn)行分組。[    {        "name": "JOHN",        "type": 1,        "sum": 5    },    {        "name": "SERA",        "type": 1,        "sum": 43    },    {        "name": "SERA",        "type": 2,        "sum": 129    },    {        "name": "JOHN",        "type": 2,        "sum": 200    }]我期望按名稱屬性分組的輸出如下。{    // Group #1    "JOHN": [      {        "type": 2,        "sum": 200      }      {        "type": 1,        "sum": 5      }    ],    // Group #2    "SERA":[     {        "type": 1,        "sum": 43     },     {        "type": 2,        "sum": 129     },    ]}我使用了嵌套循環(huán),但不幸的是執(zhí)行速度很慢并且沒(méi)有給出正確的結(jié)果。
查看完整描述

4 回答

?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊

就像您提到的那樣,我們可以使用對(duì)象而不是數(shù)組作為最外層的包裝器。并且還將一個(gè)對(duì)象內(nèi)部交換為數(shù)組,那么這是一種可能的解決方案。


var data = [{"name": "JOHN","type": 1,"sum": 5},{"name": "SERA","type": 1,"sum": 43},{"name": "SERA","type": 2,"sum": 129},{"name": "JOHN","type": 2,"sum": 200}];


var newData = {};


data.forEach( (item) => {


  if (!(item['name'] in newData)) {

      newData[item['name']] = [];

  }

  newData[item['name']].push(

      {

        'type':  item['type'],

        'sum' : item['sum']

      }

  );

});


console.log(newData);


查看完整回答
反對(duì) 回復(fù) 2023-09-14
?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊

您建議的輸出結(jié)構(gòu)無(wú)效,但是使用Array.reduce您可以創(chuàng)建一個(gè)對(duì)象,其中所有屬性都是對(duì)象數(shù)組:


const data = [

? ? {

? ? ? ? "name": "JOHN",

? ? ? ? "type": 1,

? ? ? ? "sum": 5

? ? },

? ? {

? ? ? ? "name": "SERA",

? ? ? ? "type": 1,

? ? ? ? "sum": 43

? ? },

? ? {

? ? ? ? "name": "SERA",

? ? ? ? "type": 2,

? ? ? ? "sum": 129

? ? },

? ? {

? ? ? ? "name": "JOHN",

? ? ? ? "type": 2,

? ? ? ? "sum": 200

? ? }

];


const result = data.reduce((c, {name, type, sum}) => {

? c[name] = c[name] || [];

? c[name].push({type, sum});

? return c;

}, {});

console.log(result);


查看完整回答
反對(duì) 回復(fù) 2023-09-14
?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

forEach使用,destructuring和??運(yùn)算符的另一種方式


const merge = (arr) => {

  const obj = {};

  arr.forEach(({ name, ...rest }) => (obj[name] ??= []).push(rest));

  return obj;

};


const data = [

  {

    name: "JOHN",

    type: 1,

    sum: 5,

  },

  {

    name: "SERA",

    type: 1,

    sum: 43,

  },

  {

    name: "SERA",

    type: 2,

    sum: 129,

  },

  {

    name: "JOHN",

    type: 2,

    sum: 200,

  },

];


console.log(merge(data));


查看完整回答
反對(duì) 回復(fù) 2023-09-14
?
胡說(shuō)叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

您可以使用此函數(shù)將 Array.prototype.reduce初始數(shù)據(jù)轉(zhuǎn)換為另一種數(shù)組結(jié)構(gòu)。


let data = [

    {

        "name": "JOHN",

        "type": 1,

        "sum": 5

    },

    {

        "name": "SERA",

        "type": 1,

        "sum": 43

    },

    {

        "name": "SERA",

        "type": 2,

        "sum": 129

    },

    {

        "name": "JOHN",

        "type": 2,

        "sum": 200

    }

];


function groupedBy(data, field) {

  let fieldValues = [...data].reduce((acc, current) => {

    return acc.concat(current[field]);

  }, []).filter((value, index, self) => {

    return self.indexOf(value) === index;

  });

  

  let results = fieldValues.reduce((acc, item) => {

    let items = [...data].filter(el => {

      return el.name === item;

    });

    

    items.forEach(i => delete i.name);

    

    return Object.assign(acc, { [item]: items});

  }, {});

 

  return results;

}


console.log(groupedBy(data, "name"));


查看完整回答
反對(duì) 回復(fù) 2023-09-14
  • 4 回答
  • 0 關(guān)注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)