Tengo un objeto grande que contiene direcciones y números.
{ '0x2bac18ad331A3137AbEC3a029dBb3A6cC25835ea': 1, '0x22Bf3f4EA7862739024C122aDDd2FB2981c076a7': 3, '0x9E6E8b584F26503C84661674dCD7821099c8a51d': 1, '0x37D74ca0F842817C6FC4Ea267cF2d49DEa0C06a8': 1, '0xDf92913902087aD0Bfac39659B60CebE1100595a': 1 // ... }
y trato de intercambiar claves/valores y almacenar todas las direcciones con el mismo valor numérico en una matriz, pensando en algo como esto:
var newObj = { "1": [addr1, addr2, addr3], "2": [addr1, addr2, addr3], "3": [addr1, addr2, addr3] //... }
Encontré una manera de intercambiar así:
function swaptoArray(json){ var ret = {}; for(var key in json){ ret[json[key]] = key; } return ret; }
pero tengo problemas para hacer que la parte de valor sea una matriz que contenga muchas direcciones. Intenté esto, pero no entiendo el resultado incorrecto. ¿Alguna pista?
function swaptoArray(json){ var ret = {}; var newArray = []; for(var key in json){ ret[json[key]] = newArray.push(key); } return ret; }
Resultado:
{ '1': 5, '3': 2 }
Necesita una matriz como resultado para cada valor como clave para el resultado.
function group(object) { const result = {}; for (const key in object) (result[data[key]] ??= []).push(key); return result; } const data = { '0x2bac18ad331A3137AbEC3a029dBb3A6cC25835ea': 1, '0x22Bf3f4EA7862739024C122aDDd2FB2981c076a7': 3, '0x9E6E8b584F26503C84661674dCD7821099c8a51d': 1, '0x37D74ca0F842817C6FC4Ea267cF2d49DEa0C06a8': 1, '0xDf92913902087aD0Bfac39659B60CebE1100595a': 1 } console.log(group(data));
Aquí hay una solución usando Object.entries
:
const obj = { '0x2bac18ad331A3137AbEC3a029dBb3A6cC25835ea': 1, '0x22Bf3f4EA7862739024C122aDDd2FB2981c076a7': 3, '0x9E6E8b584F26503C84661674dCD7821099c8a51d': 1, '0x37D74ca0F842817C6FC4Ea267cF2d49DEa0C06a8': 1, '0xDf92913902087aD0Bfac39659B60CebE1100595a': 1 } const objArr = Object.entries(obj) function getArray(key) { let ret = [] objArr.forEach(item => { if(item[1] === key) ret.push(item[0]) }) return ret } function swaptoArray(json) { let ret = {} for (let key in json) { const newKey = json[key] ret[newKey] = getArray(newKey) } return ret } console.log(swaptoArray(obj))