Не могу составить массив
У меня есть массив
[
{
"spearman_coefficient": -0.18,
"spearman_pvalue": 0.00002802,
"mutual_information": 18
},
{
"spearman_coefficient": -0.18,
"spearman_pvalue": 0.00002533,
"mutual_information": 15
},
{
"spearman_coefficient": -0.07,
"spearman_pvalue": 0.1247,
"mutual_information": 14
},
{
"spearman_coefficient": -0.05,
"spearman_pvalue": 0.2215,
"mutual_information": 14
},
{
"spearman_coefficient": -0.11,
"spearman_pvalue": 0.01171,
"mutual_information": 16
}
]
В каждом объекте одинаковые ключи, но желательно не затачиваться под их название, т.к. каждый раз они приходят разные, хотелось бы их сгруппировать по конкретному ключу и приписывать значения этого значения, как можно это превратить в массив вида :
[
['mutual_information',18,15,14,14],
['spearman_coefficient',18,15,14,14],
['sperman_pvalue',18,15,14,14]
]
Пытался пройти методом foreach и вытащить в пустой массив входные и как-то попытаться сопоставить... безуспешно...
arr.forEach(i=>{
a.push(Object.entries(i));
})
Ответы (1 шт):
Создаем пустой массив, который будет хранить значения. Далее проходимся в цикле по массиву и названиям свойств через for-in и проверяем, есть ли в нем уже массив с таким названием prev.find(x => x[0] === prop). Если нет добавляем, а дальше берем его добавляем наши значения prev.filter(x => x[0] === prop)[0].push(current[prop]).
В данном случае используется reduce, где prev это исходный пустой массив для заполнения и current текущий элемент, но можно и обычным циклом.
let info = [
{
"spearman_coefficient": -0.18,
"spearman_pvalue": 0.00002802,
"mutual_information": 18
},
{
"spearman_coefficient": -0.18,
"spearman_pvalue": 0.00002533,
"mutual_information": 15
},
{
"spearman_coefficient": -0.07,
"spearman_pvalue": 0.1247,
"mutual_information": 14
},
{
"spearman_coefficient": -0.05,
"spearman_pvalue": 0.2215,
"mutual_information": 14
},
{
"spearman_coefficient": -0.11,
"spearman_pvalue": 0.01171,
"mutual_information": 16
}
]
let result = info.reduce((prev, current) => {
for(var prop in current) {
if (!prev.find(x => x[0] === prop))
prev.push([prop]);
prev.filter(x => x[0] === prop)[0].push(current[prop])
}
return prev;
}, [])
console.log(result)
