【发布时间】:2019-10-23 05:17:30
【问题描述】:
我正在尝试动态更改 JSON 对象必须按其分组的属性值。例如,如果我的搜索条件是位置,我想将员工的工作位置显示为键,并且该位置的员工没有成对显示,而该位置是 JSON 中的属性之一。
这是我到目前为止所做的。我能够根据位置及其作为键值对的计数对员工进行分组。
var rows = [
{
"empId": 1,
"empName": "aaa",
"skillSet": "JAVA",
"location": "chennai"
},
{
"empId": 2,
"empName": "bbb",
"skillSet": "Angular",
"location": "chennai"
},
{
"empId": 3,
"empName": "ccc",
"skillSet": "Angular",
"location": "chennai"
},
{
"empId": 4,
"empName": "ddd",
"skillSet": "JAVA",
"location": "bangalore"
},
{
"empId": 5,
"empName": "eee",
"skillSet": "JAVA",
"location": "chennai"
},
{
"empId": 6,
"empName": "fff",
"skillSet": "JAVA",
"location": "bangalore"
},
{
"empId": 7,
"empName": "ggg",
"skillSet": "oracle",
"location": "chennai"
},
{
"empId": 8,
"empName": "hhh",
"skillSet": "JAVA",
"location": "hyderabad"
},
{
"empId": 9,
"empName": "iii",
"skillSet": "JAVA",
"location": "hyderabad"
}
]
var occurences = rows.reduce(function (r, row) {
r[row.location] = ++r[row.location] || 1;
return r;
}, {});
var result = Object.keys(occurences).map(function (key) {
return { key: key, value: occurences[key] };
});
console.log(result);
我的结果是
[{
"key": "chennai",
"value": 5
},
{
"key": "bangalore",
"value": 2
},
{
"key": "hyderabad",
"value": 2
}
]
如你所见,我已经直接硬编码了位置
r[row.location] = ++r[row.location] || 1;
相反,我想像我一样动态地制作,也应该能够使用其他属性(如 SkillSet)对其进行分组。但是怎么做。
【问题讨论】:
-
在变量中设置要计数的键,例如
var countKey = 'location'然后使用row[countKey] -
如何将您的
reduce包装在另一个具有此动态属性参数的函数中?
标签: javascript json angularjs