gpt4 book ai didi

javascript - 使用 JQuery/JavaScript 我如何将对象数组中的值分组并从组中创建一个新的对象数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:39 25 4
gpt4 key购买 nike

我有一个像这样的 JSON 对象数组

var dataSet1 = [{
"id": "1",
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"version": "5",
"grade": "X"
}, {
"id": "2",
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"version": "5",
"grade": "A"
}, {
"id": "3",
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"version": "4",
"grade": "X"
},
{
"id": "4",
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"version": "5",
"grade": "A"
}];

我想遍历这个数据集并创建一个新的对象数组,合并具有类似“等级”属性的对象,并像这样保留它们关联的“id”和“version”值的列表

“等级”属性等于“X”的旧对象

{
"id": "1",
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"version": "5",
"grade": "X"
}
{
"id": "3",
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"version": "4",
"grade": "X"
}

“等级”属性等于“X”的新对象

{
"ids":{"id":"1","id":"3"}
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"versions":{ "version":"4", "version":"5"}
"grade": "X"
}

我很确定我必须像这样使用 $.each 和 $.grep 函数

    $.each(dataSet1, function (index, value) {


tsaGrade = dataSet1[index].grade;

result = $.grep(dataSet1, function (e) {
return e.grade == tsaGrade;
})

并将 id 和版本放在新数组中,但我不知道如何防止 each 循环在下次循环遍历数据集时排除已经分组的值。

最佳答案

如果您愿意使用 Underscore.js ,这变得非常微不足道。

假设 data 是您原始的 json 对象列表,这将实现您所追求的:

var groups = [];
var by_grade = _.groupBy(data, function(obj) { return obj['grade'] });
_.each(by_grade, function(objs, grade) {
var group = {};
group['grade'] = grade;
group['ids'] = _.pluck(objs, 'id');
group['versions'] = _.pluck(objs, 'version');
// Use the following if the value is known to be
// the same for all grouped objects
group['platform'] = objs[0]['platform'];
// And the rest...
groups.push(group);
});

_.groupBy() 将按等级对您的对象进行分组,从而产生两个具有键 XA 的对象,其值为具有相应等级的对象列表。然后,您可以遍历两个对象列表中的每一个,提取所需的值,以便将它们作为列表添加到您的新对象中。很难完整描述,但请参阅此 Fiddle 上的日志消息 :)

编辑

而不是 objs['platform'] 应该使用 objs[0]['platform'] 来表示您知道的所有属性对于具有同年级。

编辑2

以此为基础,一个比 _.each 更好的方法可能是 _.map:

groups = _.map(by_grade, function(objs, grade) {
return {
grade: grade,
browsers: _.pluck(objs, 'browser'),
ids: _.pluck(objs, 'id'),
versions: _.pluck(objs, 'id'),
engines: _.pluck(objs, 'engine')
// etc
}
});

Fiddle

关于javascript - 使用 JQuery/JavaScript 我如何将对象数组中的值分组并从组中创建一个新的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com