我是新来的,我正在使用Javascript中的JSON数组
所以我需要按他们分配的产品分类“名称”
[
{
"Name":"Marcelo Rocha",
"Product_Line__c":"SAP",
"Role":"Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name":"Marcelo Rocha",
"Product_Line__c":"Business Objects",
"Role":"Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name":"Marcelo Rocha",
"Product_Line__c":"Oracle Technology",
"Role":"Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name":"Leonardo Gracioli",
"Product_Line__c":"SAP",
"Role":"Senior Support Engineer, SAP"
},
{
"Name":"Leonardo Gracioli",
"Product_Line__c":"Business Objects",
"Role":"Senior Support Engineer, SAP"
},
{
"Name":"Leonardo Gracioli",
"Product_Line__c":"Oracle Technology",
"Role":"Senior Support Engineer, SAP"
},
{
"Name":"Adriane Yonamine",
"Product_Line__c":"SAP",
"Role":"SAP Consultant"
}
]将ProductLime的“名称”组合成如下所示:
[
{
"Name":"Marcelo Rocha",
"Product_Line__c":"SAP,Business Objects,Oracle Technology",
"Role":"Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name":"Leonardo Gracioli",
"Product_Line__c":"SAP,Business Objects,Oracle Technology",
"Role":"Senior Support Engineer, SAP"
},
{
"Name":"Adriane Yonamine",
"Product_Line__c":"SAP",
"Role":"SAP Consultant"
}
]谁能知道更简单的方法吗?
发布于 2022-10-25 21:49:28
function sortUsers(Role, arr) {
let result = [];
arr.filter(person => person.Product_Line__c === Role).forEach(person => {
result.push({ Name: person.Name, Product_Line__c: arr.filter(obj => obj.Name === person.Name).map(obj => obj.Product_Line__c).join(','), Role: person.Role})
});
return result;
}
const arr = [
{
"Name":"Marcelo Rocha",
"Product_Line__c":"SAP",
"Role":"Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name":"Marcelo Rocha",
"Product_Line__c":"Business Objects",
"Role":"Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name":"Marcelo Rocha",
"Product_Line__c":"Oracle Technology",
"Role":"Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name":"Leonardo Gracioli",
"Product_Line__c":"SAP",
"Role":"Senior Support Engineer, SAP"
},
{
"Name":"Leonardo Gracioli",
"Product_Line__c":"Business Objects",
"Role":"Senior Support Engineer, SAP"
},
{
"Name":"Leonardo Gracioli",
"Product_Line__c":"Oracle Technology",
"Role":"Senior Support Engineer, SAP"
},
{
"Name":"Adriane Yonamine",
"Product_Line__c":"SAP",
"Role":"SAP Consultant"
}
];
console.log(sortUsers("SAP", arr));
发布于 2022-10-25 21:59:57
我喜欢@Haim的回答,因为它非常优雅,但它似乎也依赖于包含"SAP“( sortUsers()的角色参数)这个词的sortUsers()。
我有一个更详细,不那么优雅的代码来解释发生了什么。
更新:添加最后排序
const arr = [{
"Name": "Marcelo Rocha",
"Product_Line__c": "SAP",
"Role": "Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name": "Marcelo Rocha",
"Product_Line__c": "Business Objects",
"Role": "Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name": "Marcelo Rocha",
"Product_Line__c": "Oracle Technology",
"Role": "Regional Manager, SAP Support Delivery, LATAM"
},
{
"Name": "Leonardo Gracioli",
"Product_Line__c": "SAP",
"Role": "Senior Support Engineer, SAP"
},
{
"Name": "Leonardo Gracioli",
"Product_Line__c": "Business Objects",
"Role": "Senior Support Engineer, SAP"
},
{
"Name": "Leonardo Gracioli",
"Product_Line__c": "Oracle Technology",
"Role": "Senior Support Engineer, SAP"
},
{
"Name": "Adriane Yonamine",
"Product_Line__c": "SAP",
"Role": "SAP Consultant"
}
];
// new home for results
let combinedResults = [];
// Obtain an arrayOfUniqueNames
var arrayOfUniqueNames = [...new Set(arr.map(x => x.Name))];
// Iterate through the list
arrayOfUniqueNames.forEach(name => {
// filter through the source array
// to get an arrayOfObjectsForThisName
let arrayOfObjectsForThisName = arr.filter((obj) => obj.Name === name);
// Create a productLinesCSVForThisName
let productLinesCSVForThisName = arrayOfObjectsForThisName.map(el => el.Product_Line__c).join();
// Clone the first object in the source array and replace
// property Product_Line__c with productLinesCSVForThisName
let aSourceObjToClone = arr.find(o => o.Name === name);
let aClonedSOurceObject = Object.assign({}, aSourceObjToClone);
aClonedSOurceObject.Product_Line__c = productLinesCSVForThisName;
// Push the newly created object into the combinedResults array
combinedResults.push(aClonedSOurceObject);
});
console.log(combinedResults.sort((a, b) => {
// Sort By Product Line only
return a.Product_Line__c.localeCompare(b.Product_Line__c);
/* Or Sort by Product then Name
let value = a.Product_Line__c.localeCompare(b.Product_Line__c);
if( value === 0 )
value = a.Name.localeCompare( b.Name);
return value;
*/
}));
https://stackoverflow.com/questions/74197872
复制相似问题