Tengo una cadena en el siguiente formato:
"foo: bar, foo: baz, some: thing, some: other, third: other"
Y lo que quiero es un objeto:
{ foo: [bar, baz], some: [other, thing], third: [other] }¿Cómo podría lograr esto de una manera inteligente?
Simplemente puede dividir en , dejándolo con los pares de valores clave. Luego puede dividir cada par en : y luego agregar la clave en un objeto y almacenar los valores en una matriz.
let str = "foo: bar, foo: baz, some: thing, some: other, third: other"; let obj = {}; str.split(", ").forEach((pair) => { let [key, value] = pair.split(": "); if (obj[key]) { obj[key].push(value); } else { obj[key] = [value]; } }); console.log(obj);Primero, tenemos que dividir la matriz en base a comas para eso, podemos usar
const commaSepArray = "foo: bar, foo: baz, some: thing, some: other, third: other".split(",") entonces commaSepArray tendrá
['foo: bar', ' foo: baz', ' some: thing', ' some: other', ' third: other'] // which looks like a key-value pair , now we have to split it again and create an object like const Obj = {} commaSepArray.map((x)=>{ const keyVal = x.split(":"); if(Obj[keyVal[0]]){ Obj[keyVal[0]].push(keyVal[1]) }else { Obj[keyVal[0]] = [keyVal[1]] } })Creo que estas son las respuestas:
const string = "foo: bar, foo: baz, some: thing, some: other, third: other" const splitString = string.split(', '); let obj = {} // assign every key to the object and set the value to an empty array splitString.forEach((string) => { const innerSplitString = string.split(': '); obj[innerSplitString[0]] = [] }) // push every value into the [key]-[empty array value] of the object splitString.forEach((string) => { const innerSplitString = string.split(': '); obj[innerSplitString[0]].push(innerSplitString[1]) }) // sort the [key]-[array value] for(const key in obj) { obj[key].sort() } console.log(obj)Espero que esto te ayude, gracias