แม้ว่าคุณจะเห็นว่ามี .GroupBy
ใน README บน github แต่ก็ไม่มี .GroupBy
เมื่อคุณทำ npm install node-linq
ดังนั้นคุณจะต้องติดตั้งโมดูลด้วย
npm install https://github.com/wearefractal/node-linq/tarball/master
นี่คือข้อมูลของคุณ:
var LINQ = require('node-linq').LINQ;
var data = [ { date: '2013/06/26', name: 'A', number: 1 },
{ date: '2013/06/26', name: 'A', number: 5 },
{ date: '2013/06/27', name: 'B', number: 4 },
{ date: '2013/06/27', name: 'A', number: 4 } ];
ขั้นแรก คุณต้องการจัดกลุ่มพวกเขา ขออภัย คุณไม่สามารถจัดกลุ่มตามแฮชได้ ดังนั้นคุณจะต้องใช้คีย์ตัวแทน:
var o = new LINQ(data).GroupBy(function(row) { return row.date + '~' + row.name; });
console.log(o);
นี่คือผลลัพธ์:
{ '2013/06/26~A':
[ { date: '2013/06/26', name: 'A', number: 1 },
{ date: '2013/06/26', name: 'A', number: 5 } ],
'2013/06/27~B': [ { date: '2013/06/27', name: 'B', number: 4 } ],
'2013/06/27~A': [ { date: '2013/06/27', name: 'A', number: 4 } ] }
ต่อไป คุณต้องการรวมตัวเลขแต่ทำไม่ได้
console.log(o.__proto__); // {}
บางทีคุณอาจต้องล้อมมันด้วย LINQ
?
new LINQ(o); // InvalidCastException: Data not Array
ไม่.
มาแปลงวัตถุเป็นอาร์เรย์โดยการสูญเสียคีย์ ไม่มี Object.values()
ใน JavaScript ดังนั้นเราจึงต้องทำดังนี้:
o = new LINQ(Object.keys(o).map(function(key) { return o[key] }));
ในที่สุดเราก็สามารถรวมตัวเลขทั้งหมดได้:
o = o.Select(function(rows) { return { date: rows[0].date, name: rows[0].name, sum: new LINQ(rows).Sum(function(row) { return row.number; }) } }).ToArray();
console.log(o);
นี่คือผลลัพธ์:
[ { date: '2013/06/26', name: 'A', sum: 6 },
{ date: '2013/06/27', name: 'B', sum: 4 },
{ date: '2013/06/27', name: 'A', sum: 4 } ]
ไม่สวยมาก.
ขีดเส้นใต้
npm install underscore
ต่อไปนี้เป็นวิธีจัดกลุ่มข้อมูลของคุณโดยใช้ไลบรารี underscore
var _ = require('underscore')._;
var data = [ { date: '2013/06/26', name: 'A', number: 1 },
{ date: '2013/06/26', name: 'A', number: 5 },
{ date: '2013/06/27', name: 'B', number: 4 },
{ date: '2013/06/27', name: 'A', number: 4 } ];
var grouper = function(row) { return row.date + '~' + row.name; };
var summer = function(rows) { return rows.reduce(function(sum, row) { return sum + row.number; }, 0); };
var o = _.chain(data)
.groupBy(grouper)
.map(function(rows) { return { date: rows[0].date, name: rows[0].name, sum: summer(rows) }; })
.value();
console.log(o); // same result
ฉันคิดว่าดีกว่ามาก
person
mak
schedule
27.06.2013