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

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

合并具有相似鍵值的對(duì)象數(shù)組并創(chuàng)建包含較少對(duì)象的新數(shù)組

合并具有相似鍵值的對(duì)象數(shù)組并創(chuàng)建包含較少對(duì)象的新數(shù)組

拉莫斯之舞 2023-08-24 10:21:29
我有一個(gè)對(duì)象數(shù)組(超過 5000 個(gè)條目),其中包含Units Sold來自多個(gè)國家/地區(qū)的數(shù)據(jù)。我試圖獲取所有類似的國家/地區(qū),添加金額,然后返回一個(gè)新的對(duì)象數(shù)組,其中每個(gè)國家/地區(qū)及其總金額僅出現(xiàn)一次。我認(rèn)為下面的代碼是正確的,但我確信我正在采取低效的路線,并且肯定它是完全錯(cuò)誤的。我確定我需要應(yīng)用該reduce()方法,并且可能還需要使用其他方法forEach(),但我不確定如何使用。已經(jīng)這樣做了幾天了,并且希望/感謝一些幫助。謝謝!  const data = [     {      "Country" : "USA",      "Units Sold" : 1245.56     },     {      "Country" : "Spain",      "Units Sold" : 7843.50     },     {      "Country" : "USA",      "Units Sold" : 1435.99     },     {      "Country" : "Uruguay",      "Units Sold" : 594.20     },    ]    let result = [];    data.forEach((block) => {      if (result.length === 0) {        result.push({          Country: block.Country,          "Units Sold": block["Units Sold"],        });      } else {        data.forEach((e) => {          if (e.Country === block.Country) {            console.log("add values");            e["Units Sold"] += block["Units Sold"];            console.log(e);          }        });      }    });期望的結(jié)果:    const newArray = [     {      "Country" : "USA",      "Units Sold" : 2681.55     },     {      "Country" : "Spain",      "Units Sold" : 7843.50     },     {      "Country" : "Uruguay",      "Units Sold" : 594.20     },    ]
查看完整描述

2 回答

?
jeck貓

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

有時(shí),與其試圖在一次操作中完成所有事情,不如一步一步地做事情更有意義。例如,您的問題可以分為兩個(gè)步驟。

  1. 按國家分組

  2. 離散組求和

現(xiàn)在我們所要做的就是創(chuàng)建一些構(gòu)建塊來幫助您實(shí)現(xiàn)這一結(jié)果。

通過...分組

按運(yùn)算符分組很簡單,您已經(jīng)在這樣做了。但我們可以通過使用地圖使其更快一些。這使我們能夠立即判斷一個(gè)國家/地區(qū)組是否存在,而無需搜索我們的數(shù)組。

const groupBy = (array, selector) => {

? return array.reduce((groups, value) => {

? ? const key = selector(value);

? ? const group = groups.get(key);

? ??

? ? if (group == null) {

? ? ? ? groups.set(key, [value]);

? ? } else {

? ? ? ? group.push(value);

? ? }

? ??

? ? return groups;

? }, new Map());

};


const groups = groupBy(data, (d) => d["Country"]);

我們?cè)谶@里使用array.reducereduce將集合轉(zhuǎn)換為單個(gè)值。

接下來,我們將使用求和運(yùn)算符來遍歷每個(gè)組并對(duì)選擇器返回的內(nèi)容求和。

const sum = (array, selector) => {

? return array.reduce((s, value) => {

? ? return s + selector(value);

? }, 0);

};

這看起來應(yīng)該與 非常相似groupBy。我們將reducing多個(gè)值合并為一個(gè)總和。


結(jié)果

現(xiàn)在,既然我們有了兩個(gè)構(gòu)建塊,我們只需將它們單擊在一起即可獲得我們想要的結(jié)果。


const groups = groupBy(data, (v) => v["Country"])

const unitsSoldByCountry = Array.from(groups.entries())

? .map(([country, sales]) => {

? ? return {

? ? ? "Country": country,

? ? ? "Units Sold": sum(sales, (s) => s["Units Sold"])

? ? };

? });

我們groupBy國家。然后,對(duì)于每個(gè)群體(國家),我們都會(huì)sum增加他們的銷售單位。我們?cè)谶@里使用array.map運(yùn)算符,因?yàn)槲覀兿M绻?code>N國家/地區(qū),我們將返回N求和記錄。

const data = [

? {

? ? "Country": "USA",

? ? "Units Sold": 1245.56

? },

? {

? ? "Country": "Spain",

? ? "Units Sold": 7843.50

? },

? {

? ? "Country": "USA",

? ? "Units Sold": 1435.99

? },

? {

? ? "Country": "Uruguay",

? ? "Units Sold": 594.20

? }

];


const groupBy = (array, selector) => {

? return array.reduce((groups, value) => {

? ? const key = selector(value);

? ? const group = groups.get(key);

? ??

? ? if (group == null) {

? ? ? ? groups.set(key, [value]);

? ? } else {

? ? ? ? group.push(value);

? ? }

? ??

? ? return groups;

? }, new Map());

};


const sum = (array, selector) => {

? return array.reduce((s, value) => {

? ? return s + selector(value);

? }, 0);

};


const groups = groupBy(data, (v) => v['Country'])

const unitsSoldByCountry = Array.from(groups.entries())

? .map(([country, sales]) => {

? ? return {

? ? ? "Country": country,

? ? ? "Units Sold": sum(sales, (s) => s["Units Sold"])

? ? };

? });


console.log(unitsSoldByCountry);


肯定有一些方法可以用更少的代碼行來做到這一點(diǎn)。但我更喜歡可重用的組件,它們?cè)试S更多的聲明性編程,使您的代碼更易于閱讀和更改。



查看完整回答
反對(duì) 回復(fù) 2023-08-24
?
慕沐林林

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

const data = [

        {

  "Country" : "USA",

  "sold" : 15.56

 },

 {

  "Country" : "USA",

  "sold" : 1245.56

 },

 {

  "Country" : "Spain",

  "sold" : 7843.50

 },

 {

  "Country" : "USA",

  "sold" : 1435.99

 },

 {

  "Country" : "Uruguay",

  "sold" : 594.20

 },

]


const usaEntries= data.filter(item => item.Country === 'USA')

const sum = pays.reduce((a, n) => (a + Number(n.sold)), 0);

第一行檢索所有美國條目,第二行對(duì)所有商品的銷售總額進(jìn)行求和,它有兩個(gè)參數(shù),a 表示累加器,n 表示當(dāng)前值,0 是將累加器初始化為零。


您也可以在一行中完成


 const sum = data.filter(item => item.Country === 'USA').reduce((a, n) => (a + Number(n.sold)), 0);

您還可以將所有國家/地區(qū)分組到一個(gè)數(shù)組中


    let group = data.reduce((a, n) => {


        a[n.Country] = [...a[n.Country] || [], n];

        return a;

    }, {});

然后,您可以使用reduce對(duì)每個(gè)項(xiàng)目應(yīng)用求和函數(shù),以獲得每個(gè)國家/地區(qū)的銷售情況。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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