使用linq.js从多个对象创建JSON对象数组

Creat array of JSON objects from mulitple objects using linq.js

本文关键字:对象 创建 JSON 数组 linq js 使用      更新时间:2024-05-25

我有一个JSON数组,如下所示:

var jsonArray = [
    { Date: "2010-02-25", Size:"Large", Type:"a", Value: "100"},
    { Date: "2010-02-25", Size:"Medium", Type:"a", Value: "160"},
    { Date: "2010-02-25", Size:"Small", Type:"a", Value: "200"},
    { Date: "2010-02-25", Size:"Large", Type:"b", Value: "400"},
    { Date: "2010-02-25", Size:"Medium", Type:"b", Value: "120"},
    { Date: "2010-02-25", Size:"Small", Type:"b", Value: "170"}
]

我一直在使用linq.js,我试图操作上面的JSON,所以6个对象变成了2个,所以我留下了一个数组,如下所示:

var desiredArray = [
    { Date: "2010-02-25", Large:"100", Medium: "160", Small: "200", Type:"a" }
    { Date: "2010-02-25", Large:"400", Medium: "120", Small: "170", Type:"b" }
]

但这是我第一次使用linq。我花了很长时间试图弄清楚,但我真的不知道如何开始

有人能给我指正确的方向吗?

任何帮助都将不胜感激

以下是实现这一目标的一种方法:

var jsonArray = [
    { Date: "2010-02-25", Size:"Large", Type:"a", Value: "100"},
    { Date: "2010-02-25", Size:"Medium", Type:"a", Value: "160"},
    { Date: "2010-02-25", Size:"Small", Type:"a", Value: "200"},
    { Date: "2010-02-25", Size:"Large", Type:"b", Value: "400"},
    { Date: "2010-02-25", Size:"Medium", Type:"b", Value: "120"},
    { Date: "2010-02-25", Size:"Small", Type:"b", Value: "170"}
];
function makeGroupKey(item) {
    return JSON.stringify({
        Date: item.Date,
        Type: item.Type
    });
}
function mergeItems(items) {
    return items.Aggregate(JSON.parse(items.Key()), function (prev, next) {
        prev[next.Size] = next.Value;
        return prev;
    });
}
var result = Enumerable.From(jsonArray)
    .GroupBy(makeGroupKey)
    .Select(mergeItems)
    .ToArray();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.min.js"></script>