按 javascript 对象中的键值对对象进行分组
group objects by values of a key in javascript object
我有一个输入对象,例如:
[{
"id": "123",
"title": "Article 1",
"evaluationLevel": {
"levelName":A
},
"category": ["Category 1", "Category 2", "Category 3"]
},
{
"id": "234",
"title": "Article 2",
"evaluationLevel": {
"levelName":B
},
"category": ["Category 2", "Category 4"]
},
{
"id": "567",
"title": "Article 3",
"evaluationLevel": {
"levelName":C
},
"category": ["Category 1"]
}]
我需要的输出是:
{
"Category 1": [
["1", "Article 1", A],
["2", "Article 3", C]
],
"Category 2": [
["3", "Article 1", A],
["4", "Article 2", B]
],
"Category 3": [
["5", "Article 1", A]
],
"Category 4": [
["6", "Article 2", C]
]
}
在 javascript 中是否有任何更简洁的方法来对像这样的对象进行分组。我在 中发现了类似的问题。区别在于我需要按类别对象的值对对象进行分组。
您可以使用 array#reduce
将数组分组。一旦你有了这个对象,就给它添加索引。
let index = 0;
const data = [{ "id": "123", "title": "Article 1", "evaluationLevel": { "levelName": 'A' }, "category": ["Category 1", "Category 2", "Category 3"] }, { "id": "234", "title": "Article 2", "evaluationLevel": { "levelName": 'B' }, "category": ["Category 2", "Category 4"] },{ "id": "567", "title": "Article 3", "evaluationLevel": { "levelName": 'C' }, "category": ["Category 1"] }],
result = data.reduce((r,o,i) => {
o.category.forEach((category, j) => {
r[category] = r[category] || [];
r[category].push([o.title, o.evaluationLevel.levelName])
});
return r;
},{}),
output = Object.keys(result).reduce((r,k) => {
result[k].forEach((item) => {
index++;
r[k] = r[k] || [];
r[k].push([index, ...item]);
});
return r;
}, {})
console.log(output);
我有一个输入对象,例如:
[{
"id": "123",
"title": "Article 1",
"evaluationLevel": {
"levelName":A
},
"category": ["Category 1", "Category 2", "Category 3"]
},
{
"id": "234",
"title": "Article 2",
"evaluationLevel": {
"levelName":B
},
"category": ["Category 2", "Category 4"]
},
{
"id": "567",
"title": "Article 3",
"evaluationLevel": {
"levelName":C
},
"category": ["Category 1"]
}]
我需要的输出是:
{
"Category 1": [
["1", "Article 1", A],
["2", "Article 3", C]
],
"Category 2": [
["3", "Article 1", A],
["4", "Article 2", B]
],
"Category 3": [
["5", "Article 1", A]
],
"Category 4": [
["6", "Article 2", C]
]
}
在 javascript 中是否有任何更简洁的方法来对像这样的对象进行分组。我在
您可以使用 array#reduce
将数组分组。一旦你有了这个对象,就给它添加索引。
let index = 0;
const data = [{ "id": "123", "title": "Article 1", "evaluationLevel": { "levelName": 'A' }, "category": ["Category 1", "Category 2", "Category 3"] }, { "id": "234", "title": "Article 2", "evaluationLevel": { "levelName": 'B' }, "category": ["Category 2", "Category 4"] },{ "id": "567", "title": "Article 3", "evaluationLevel": { "levelName": 'C' }, "category": ["Category 1"] }],
result = data.reduce((r,o,i) => {
o.category.forEach((category, j) => {
r[category] = r[category] || [];
r[category].push([o.title, o.evaluationLevel.levelName])
});
return r;
},{}),
output = Object.keys(result).reduce((r,k) => {
result[k].forEach((item) => {
index++;
r[k] = r[k] || [];
r[k].push([index, ...item]);
});
return r;
}, {})
console.log(output);