巧用underscore.js處理復雜的json
阿新 • • 發佈:2018-02-23
mapreduce 過濾 aud 復雜 固定 string 裏的 red count
underscore.js是非常小巧的js工具庫,特別方便處理數組,對象,json等
引入underscore.js:
var _ = require(‘underscore‘);
原始api列表
{ liveSessionDTOS: [ { sessionId: "xx", userId: xx, ..... playingGame: false, gameSessionDTO: null, liveScore: { .... } } ] }
我們關心的是gameSessionDTO,這個遊戲列表裏的遊戲是不固定的,要按遊戲計數並存入mysql。如果每個遊戲一列是不行的,因為無法確定。所以只能把json存到一個string列中(ps:mysql 5.7支持json列了,但本文不用)
var gameinfos = _.compact(_.pluck(liveList, ‘gameSessionDTO‘));
pluck是按屬性提取為一個數組,compact是過濾掉js false的數據,這裏是過濾空值,這樣就做成了
{ gameId: 2, icon: "xxx", name: "game a" }
的列表,然後我們再用countby按name統計
var game_online = _.countBy(gameinfos, function (g) { return g.name; });
就得到了我們要的json並存入mysql
解析的部分:
從mysql裏讀出來後,利用_.pick抽取需要的屬性為一個新的json,結合其他方法再行處理
常用方法:
_.chain:像jquery一樣的鏈式操作,如_.chain(xx).compact().map(function(g){return g.name;}).value()
_.map, _.reduce:經典的mapreduce方法
_.clone:深拷貝一個對象,數組。生成完全不同的對象
巧用underscore.js處理復雜的json