亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS中的groupBy方法

bigdevil_s / 2997人閱讀

摘要:最近工作中需要寫一些運營數(shù)據(jù)報表的頁面,后端返回的數(shù)據(jù)都是未處理過的,所以,大量的運算任務(wù)交給了前端來做,這其中有一個功能就是對數(shù)據(jù)進行分組,一開始我自己也嘗試寫了一些,但代碼量比較大,顯得很繁瑣,直到后來在上看到了某位大牛寫的方法,非常簡

最近工作中需要寫一些運營數(shù)據(jù)報表的頁面,后端返回的數(shù)據(jù)都是未處理過的json,所以,大量的運算任務(wù)交給了前端來做,這其中有一個功能就是對數(shù)據(jù)進行分組,一開始我自己也嘗試寫了一些,但代碼量比較大,顯得很繁瑣,直到后來在stackoverflow上看到了某位大牛寫的方法,非常簡潔優(yōu)雅,代碼如下:

function groupBy( array , f ) {
    let groups = {};
    array.forEach( function( o ) {
        let group = JSON.stringify( f(o) );
        groups[group] = groups[group] || [];
        groups[group].push( o );
    });
    return Object.keys(groups).map( function( group ) {
        return groups[group];
    });
}

let list = [
    {"name": "John","Average":15,"High":10,"DtmStamp":1358226000000},
    {"name": "Jane","Average":16,"High":92,"DtmStamp":1358226000000},
    {"name": "Jane","Average":17,"High":45,"DtmStamp":1358226000000},
    {"name": "John","Average":18,"High":87,"DtmStamp":1358226000000},
    {"name": "Jane","Average":15,"High":10,"DtmStamp":1358226060000},
    {"name": "John","Average":16,"High":87,"DtmStamp":1358226060000},
    {"name": "John","Average":17,"High":45,"DtmStamp":1358226060000},
    {"name": "Jane","Average":18,"High":92,"DtmStamp":1358226060000}
];

let sorted = groupBy(list, function(item){
    return [item.name];
});
console.log(sorted);

具體實現(xiàn)思路:

函數(shù)groupBy有兩個形參,一為對象數(shù)組,二為匿名函數(shù)(該函數(shù)功能:返回對象的某個指定屬性的屬性值并存放在數(shù)組中);

groupBy函數(shù)內(nèi),先創(chuàng)建一個空對象;

然后forEach遍歷對象數(shù)組,遍歷時要執(zhí)行的函數(shù)中只有一個形參o(數(shù)組中的每個元素);

由于下面函數(shù)調(diào)用是想用name來分組,因此let group = JSON.stringify( f(o) ),相當(dāng)于先獲取到對象數(shù)組list中的name屬性對應(yīng)的屬性值并放入數(shù)組中:["John"],然后再將屬性值轉(zhuǎn)換為json字符串:"["John"]";

groups[group] = groups[group] || [],在js中對象也是關(guān)聯(lián)數(shù)組,因此這里相當(dāng)于做了兩件事,一是把group作為groups的key,二是將對應(yīng)的value初始化,第一次執(zhí)行為空數(shù)組,循環(huán)執(zhí)行時找到相同的name時保持不變;

groups[group].push( o ),這句相當(dāng)于把list中每個對象壓入數(shù)組中作為value;

最后,Object.keys(groups)是取出groups對象中的所有key,然后遍歷一個個key組成的新數(shù)組,返回分好了組的二維數(shù)組,至此大功告成~~~

結(jié)果如下:

[ [ { name: "John", Average: 15, High: 10, DtmStamp: 1358226000000 },
    { name: "John", Average: 18, High: 87, DtmStamp: 1358226000000 },
    { name: "John", Average: 16, High: 87, DtmStamp: 1358226060000 },
    { name: "John", Average: 17, High: 45, DtmStamp: 1358226060000 } ],
  [ { name: "Jane", Average: 16, High: 92, DtmStamp: 1358226000000 },
    { name: "Jane", Average: 17, High: 45, DtmStamp: 1358226000000 },
    { name: "Jane", Average: 15, High: 10, DtmStamp: 1358226060000 },
    { name: "Jane", Average: 18, High: 92, DtmStamp: 1358226060000 } ] ]

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/91855.html

相關(guān)文章

  • 1625行,解開 underscore.js 的面紗 - 第四章

    摘要:接收三個參數(shù)分別為回調(diào)和,其中與是可選參數(shù)。官網(wǎng)釋義排序一個列表組成一個組,并且返回各組中的對象的數(shù)量的計數(shù)。類似,但是不是返回列表的值,而是返回在該組中值的數(shù)目。 繼續(xù)前面的內(nèi)容,前文我們提到了很多方法的講解,其實到這里就已經(jīng)差不多了,因為大部分代碼其實都是套路,一些基礎(chǔ)函數(shù)再靈活變化就可以組成很多實用的功能。 _.sortBy = function(obj, iteratee,...

    zhaochunqi 評論0 收藏0
  • JavaScript 實現(xiàn)數(shù)組更多的高階函數(shù)

    摘要:實現(xiàn)數(shù)組更多的高階函數(shù)吾輩的博客原文場景雖說人人平等,但有些人更加平等。若是有一篇適合萌新閱讀的自己實現(xiàn)數(shù)組更多操作的文章,情況或許會發(fā)生一些變化。類似于的初始值,但它是一個函數(shù),避免初始值在所有分組中進行累加。 JavaScript 實現(xiàn)數(shù)組更多的高階函數(shù) 吾輩的博客原文: https://blog.rxliuli.com/p/fc... 場景 雖說人人平等,但有些人更加平等。 為...

    aervon 評論0 收藏0
  • 數(shù)據(jù)科學(xué) 第 3 章: 9 累計與分組 groupby

    摘要:聚合后沒有用函數(shù),會返回一個用函數(shù)后會顯示計算結(jié)果組合之后,切片,查看的和。可以設(shè)定計算方法對列進行了切片,如果的均值小于,則不顯示二部的均值低于,所以結(jié)果中沒有二部數(shù)據(jù)。 本節(jié)學(xué)習(xí)groupby 引用激勵數(shù)據(jù),連接數(shù)據(jù)庫jili表(代碼省略)數(shù)字簡單計算本節(jié)內(nèi)容前面是運用sum/mean等函數(shù)對數(shù)字簡單計算 jili.mean() #求均值 jili.mean(axis = col...

    wemallshop 評論0 收藏0
  • JavaScript30秒, 從入門到放棄之Array(三)

    摘要:否則,直接循環(huán)去拼接該值返回按照指定的方法對數(shù)組元素進行分組歸類。使用創(chuàng)建一個對象,對象的鍵是生成的結(jié)果,值是符合該鍵的所有數(shù)組元素組成的數(shù)組。微信公眾號秒,從入門到放棄之三 原文鏈接:JavaScript30秒, 從入門到放棄之Array(三)水平有限,歡迎批評指正 flattenDepth Flattens an array up to the specified depth....

    FrancisSoung 評論0 收藏0
  • Underscore 源碼(三)隨機洗牌算法

    摘要:隨機洗牌算法說實話,以前理解數(shù)組的排序,都是將數(shù)組按照一定的邏輯由大到小或者由小到大排序,我自己是沒有碰到過隨機打亂數(shù)組排序的問題。然后里用的是所謂的洗牌算法,很高效??偨Y(jié)又是三個知識點,分別是隨機洗牌分組和函數(shù)的實現(xiàn),沒什么復(fù)雜的。 這是第三篇關(guān)于 Underscore 的源碼解讀,最近一段時間學(xué)的東西很少,自己太忙了,一方面忙著找實習(xí),晚上回去還要寫畢業(yè)論文。畢業(yè)論文真的很憂傷,因...

    silencezwm 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<