我在Javascript函数中有以下JSON数据(这里进行了简化):
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值的使用):
[
{
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
},
]但我不确定我会一下子得到所有这些,所以我可以解决每个日期对下的一组类别和金额,然后我可以通过某种方式处理上面的内容:
[
{
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,但无法获得所需的内容。
具有以下功能:
var result = linq.groupBy("$.Expiry", "", "k,e => { Expiry: k, Categories: e.select('$.Category').toArray(), Amounts: e.select('$.Amount').toArray()}").toArray();我得到了:
[
{
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放进去。
有人能帮上忙吗?
答:
发布于 2013-03-27 05:31:06
您的密钥应该是同时包含Expiry和EndDate的复合键。然后,您可以将其包含在您的结果中。
我不建议你尝试获得理想的结果,创造这样的结果不符合LINQ的精神。相反,你应该收集你正在查询的项目。
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();然而,仍然有可能获得理想的结果,但我再次建议不要使用这种方法。
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();https://stackoverflow.com/questions/15642333
复制相似问题