首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript linq.js分组方式

javascript linq.js分组方式
EN

Stack Overflow用户
提问于 2013-03-27 00:28:28
回答 1查看 6.5K关注 0票数 0

我在Javascript函数中有以下JSON数据(这里进行了简化):

代码语言:javascript
复制
var data = [
  { Expiry: "2013-01-02T00:00:00", EndDate: "2013-01-16T00:00:00", Category: 10, Amount: 14.53 },
  { Expiry: "2013-01-02T00:00:00", EndDate: "2013-01-16T00:00:00", Category: 25, Amount: 14.86 },
  { Expiry: "2013-02-06T00:00:00", EndDate: "2013-02-20T00:00:00", Category: 10, Amount: 14.43 },
  { Expiry: "2013-02-06T00:00:00", EndDate: "2013-02-20T00:00:00", Category: 25, Amount: 14.76 }
];

注意:对于任何特定的过期值,EndDate值始终是相同的。

现在,理想情况下,我希望在末尾有以下JSON (按到期日期分组,并注意属性名称中Category值的使用):

代码语言:javascript
复制
[
   {
     Expiry: 2013/1/2,     (note: not fussed about the date format)
     EndDate: 2013/1/16,
     Category10: 14.53,
     Category25: 14.86
   },
   {
     Expiry: 2013/2/6,
     EndDate: 2013/2/20,     
     Category10: 14.43,
     Category25: 14.76
   },
]

但我不确定我会一下子得到所有这些,所以我可以解决每个日期对下的一组类别和金额,然后我可以通过某种方式处理上面的内容:

代码语言:javascript
复制
[
   {
     Expiry: 2013/1/2,    
     EndDate: 2013/1/16,
     Categories: [ { 10, 25 } ],
     Amounts: [ { 14.53, 14.86 } ]
   },
   {
     Expiry: 2013/2/6,
     EndDate: 2013/2/20,
     Categories: [ { 10, 25 } ],
     Amounts: [ { 14.43, 14.76 } ]
   },
]

我尝试使用linq.js库中的groupby函数来获取所需的JSON,但无法获得所需的内容。

具有以下功能:

代码语言:javascript
复制
var result = linq.groupBy("$.Expiry", "", "k,e => { Expiry: k, Categories: e.select('$.Category').toArray(), Amounts: e.select('$.Amount').toArray()}").toArray();

我得到了:

代码语言:javascript
复制
[
   {
     Expiry: 2013/1/2,    
     Categories: [ { 10, 25 } ],
     Amounts: [ { 14.53, 14.86 } ]
   },
   {
     Expiry: 2013/2/6,
     Categories: [ { 10, 25 } ],
     Amounts: [ { 14.43, 14.76 } ]
   },
]

但是我不知道怎么把EndDate放进去。

有人能帮上忙吗?

答:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 05:31:06

您的密钥应该是同时包含ExpiryEndDate的复合键。然后,您可以将其包含在您的结果中。

我不建议你尝试获得理想的结果,创造这样的结果不符合LINQ的精神。相反,你应该收集你正在查询的项目。

代码语言:javascript
复制
var query = Enumerable.From(data)
    .GroupBy(
        "{ Expiry: $.Expiry, EndDate: $.EndDate }",
        null,
        "{ Expiry: $.Expiry, EndDate: $.EndDate, Categories: $$.Select('$.Category').ToArray(), Amounts: $$.Select('$.Amount').ToArray() }",
        "$.Expiry + '-' + $.EndDate" // compare selector needed
    )
    .ToArray();

然而,仍然有可能获得理想的结果,但我再次建议不要使用这种方法。

代码语言:javascript
复制
var query = Enumerable.From(data)
    .GroupBy(
        "{ Expiry: $.Expiry, EndDate: $.EndDate }",
        null,
        function (key, g) {
            return g.Aggregate({
                Expiry: key.Expiry,
                EndDate: key.EndDate
            }, function (result, item) {
                result['Category' + item.Category] = item.Amount;
                return result;
            });
        },
        "$.Expiry + '-' + $.EndDate"
    )
    .ToArray();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15642333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档