按列分组json数据
问题描述:
我有json数组
let arr = [
{ EMAIL: 'john@example.com', LASTNAME: 'Smith', FIRSTNAME: 'John', SMS: '33123456789' },
{ EMAIL: 'harry@example.com', LASTNAME: 'Pierce', FIRSTNAME: 'Harry', SMS: '33111222222' },
{ EMAIL: 'howard@example.com', LASTNAME: 'Paige', FIRSTNAME: 'Howard', SMS: '33777888898' },
];
我想要类似
EMAIL : {"john@example.com","harry@example.com","howard@example.com"}
LASTNAME={"Smith", "Pierce","Paige"}
我尝试了很多事情,我想出了一种使用列名列为核心的解决方案
i tried many things , i came up with one solution with hardcore column name
var arr3=["EMAIL", "LASTNAME", "FIRSTNAME", "SMS"];
let arr_email=[];
arr.forEach(function(e, i) {
arr_email.push(arr[i]['EMAIL'])
})
var arr2=[];
arr2.push({"EMAIL":arr_email});
但是我正在寻找通用解决方案.我不想传递硬核列名称. 请建议
But I am looking for generic solution . I dont want to pass hardcore column name. please suggest
答
已更新:修复了命名和初始化问题,以使所有内容保持一致.
Updated: Fixed naming and initialisation to make everything consistent.
使用类似这样的内容:
let arr=[{EMAIL: "john@example.com", LASTNAME: "Smith", FIRSTNAME: "John", SMS: "33123456789"}
,{EMAIL: "harry@example.com", LASTNAME: "Pierce", FIRSTNAME: "Harry", SMS: "33111222222"}
,{EMAIL: "howard@example.com", LASTNAME: "Paige", FIRSTNAME: "Howard", SMS: "33777888898"}]
let newObject = {}
arr.forEach(element => {
Object.keys(element).forEach(key => {
if(!newObject[key]) {
newObject[key] = []
}
newObject[key].push(element[key])
})
})
因此,您将拥有:
console.log(newObject)
类似的东西:
EMAIL: (3) ["john@example.com", "harry@example.com", "howard@example.com"]
FIRSTNAME: (3) ["John", "Harry", "Howard"]
LASTNAME: (3) ["Smith", "Pierce", "Paige"]
SMS: (3) ["33123456789", "33111222222", "33777888898"]