Tengo una matriz JSON y JSON y quiero enviar todos los elementos de una matriz JSON a JSON con alguna condición.
Aquí está mi código:
let json = { Jack: 10, Merry: 29, Charles: 37, Lahm: 0 } let jsonArray = [ { match: { Ashley: 46, }, }, ] for (const key in json) { if (json[key] !== 0) { jsonArray.push({ match: `{${key}: ${json[key]}}`, }) } }Recibo la siguiente respuesta:
[ { match: { Ashley: 46 } }, { match: '{Jack: 10}' }, { match: '{Merry: 29}' }, { match: '{Charles: 37}' } ]El problema es que los elementos empujados tienen comillas simples que no quiero. ¿Hay alguna manera de empujar esos elementos sin comillas?
Tenga en cuenta que en realidad no está trabajando con JSON. JSON es una representación de cadena de objetos de JavaScript. Lo que tiene es simplemente un objeto JS simple y también una matriz de objetos.
Su problema es que simplemente está pasando una cadena a match , y no un objeto real, cuando usa literales de plantilla.
En su lugar, use la notación de corchetes para usar el valor de la variable key en su nuevo objeto de match , es decir:
match: { [key]: json[key] }Ver ejemplo de prueba de concepto:
let myObject = { Jack: 10, Merry: 29, Charles: 37, Lahm: 0 } let myArrayOfObjects = [{ match: { Ashley: 46, }, }, ] for (const key in myObject) { if (myObject[key] !== 0) { myArrayOfObjects.push({ match: { [key]: myObject[key] } }) } } console.log(myArrayOfObjects); Esta también es una buena oportunidad para explorar el uso de Object.entries , ya que en realidad devuelve la tupla a [key, value] :
let myObject = { Jack: 10, Merry: 29, Charles: 37, Lahm: 0 } let myArrayOfObjects = [{ match: { Ashley: 46, }, }, ] Object.entries(myObject).forEach(([key, value]) => { if (value !== 0) { myArrayOfObjects.push({ match: { [key]: value } }) } }); console.log(myArrayOfObjects);El problema es que está enviando un objeto con una cadena de plantilla a la matriz. Necesitas cambiar un poco la sintaxis.
for (const key in json) { if (json[key] !== 0) { jsonArray.push({ match: {[key]: json[key]} }) } }Debe acceder a los pares clave/valor del objeto JS y no agregar una cadena a la matriz. Una vez que se haya completado para todas las propiedades, si es necesario, puede convertir la matriz en JSON.
const obj = { Jack: 10, Merry: 29, Charles: 37, Lahm: 0 }; const arr = [ { match: { Ashley: 46 } }]; for (const key in obj) { arr.push({ match: { [key]: obj[key] } }); } console.log(arr); console.log(JSON.stringify(arr));