Cuál es la mejor manera de convertir:
["Foo", "Bar", "John"]A:
{ Foo: { name: 'Foo', index: 0, type: 'String' }, Bar: { name: 'Bar', index: 1, type: 'String' }, John: { name: 'John', index: 2, type: 'String' }, }Creo que necesito utilizar
array.map()pero no estoy seguro de cómo estructurar mi función de mapeo. Cualquier idea sería útil.
Puede la función Array.prototype.reduce de la siguiente manera.
const source = ["Foo", "Bar", "John"], capitalize = string => string.charAt(0).toUpperCase() + string.slice(1), result = source.reduce((a, name, index) => ({...a, [name]: {name, index, type: capitalize(typeof name)}}), {}); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }su json no es válido, por lo que si necesita el json válido como este
[{"name":"Foo","index":0,"type":"string"},{"name":"Foo","index":1,"type":"string"},{"name":"Foo","index":2,"type":"string"}]puedes usar este codigo
var result=[]; arr.forEach( (element,i )=> { result.push( {name:element, index:i, type: typeof element}); });ACTUALIZAR
para tu otro json
var jarr=["Foo", "Bar", "John"]puedes usar este codigo
var result = {}; jarr.forEach((element, i) => { result[element] = { name: element, index: i, type: typeof element }; });resultado
{ "Foo": { "name": "Foo", "index": 0, "type": "string" }, "Bar": { "name": "Bar", "index": 1, "type": "string" }, "John": { "name": "John", "index": 2, "type": "string" } }Creo que podrías hacer lo siguiente
const array = ["Foo", "Bar", "John"]; Object.fromEntries( array .map((el, index) => { return [el, {name: el, index, type: el.constructor.name}] }) )Aquí puede encontrar un fragmento de ejemplo:
const array = ["Foo", "Bar", "John"]; const result = Object.fromEntries( array .map((el, index) => { return [el, {name: el, index, type: el.constructor.name}] }) ); console.log(result);