Tengo un objeto JSON que a veces será un objeto (una sola instancia) y, a veces, una matriz (múltiples instancias del objeto). Necesito escribir una declaración if que básicamente diga si esta sección de JSON es un objeto, envuélvalo en una matriz que contenga ese único objeto y, si es una matriz que contiene varios objetos, devuelva esa matriz. En cualquier caso, estoy devolviendo una matriz que contiene 1 o varios objetos. Así es como se ve el JSON cuando NO es una matriz.
"link": { "values": { "key1": "value1", ... "key8": "value8" }, "key9": "value9" }Y debería verse así cuando es una matriz:
"link": [{ "values": { "key1": "value1", ... "key8": "value8", }, "key9": "value9" }]EDITAR ----------------------------- Esto es lo que he escrito hasta ahora que está produciendo el tipo de error que estoy experimentando.
const isLinkArray = sections.values; isLinkArray.link = Array.isArray(isLinkArray.link) ? isLinkArray.link : [isLinkArray.link];EDICIÓN 2 ---------------------------
La respuesta final terminó siendo casi idéntica a la respuesta de Kinglish, así que pensé en publicarla aquí. El problema con el que me encontré fue que el JSON justo encima del 'enlace' también era una matriz y eso estaba causando el error de mecanografiado.
const sectionsWithLinkArray = sections.map((section) => { return { values: { ...section.values, link: !Array.isArray(section.values.link) ? [section.values.link] : section.values.link, }, }; });Puede usar Array.isArray para verificar, luego convertir
let data = { "link": { "values": { "key1": "value1", "key8": "value8" }, "key9": "value9" } } data.link = Array.isArray(data.link) ? data.link : [data.link]; console.log(data)Esto se puede hacer escribiendo una función simple que verifique si es una matriz.
const returnArray = (value) => { if (Array.isArray(value) { return value; } return }actualizó la respuesta de @Kinglish a mecanografiado uno porque no puede cambiar los tipos de valor definido, ya que da un error para esto, simplemente ignore el mecanografiado o defina tipos que simplemente acepten el enlace en object y la array of object o simplemente creó una nueva variable que espera un enlace en la matriz y envuélvalo dentro de los datos simplemente haciendo esto:
const data = { link: { values: { key1: 'value1', key8: 'value8', }, key9: 'value9', }, }; // This is the type of data you can't change it by default and it doesn't expect array of object of `link`. // const data: { // link: { // values: { // key1: string; // key8: string; // }; // key9: string; // }; // }; const linkArray = { link: Array.isArray(data.link) ? data.link : [data.link] }; // Now this is the type of linkArray that expect array of object of `link` // const linkArray: { // link: { // values: { // key1: string; // key8: string; // }; // key9: string; // }[]; // }; console.log('data', data); console.log('linkArray', linkArray);