Obtuve esta cadena json que necesito analizar y eliminar datos, pero no estoy seguro de cómo hacerlo. Digamos que tengo el siguiente json:
<input name="uppyResult" type="hidden" value="[{ "successful":[ {"id":"uppy-a8geo/fw/400x400/jpg-1d-2v-1e-image/jpeg-10097-1626922525568"}, {"id":"uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772"} ], "failed":[], "uploadID":"ckss6e4xv00023h63uov94n5e" }]" > Obtengo el elemento con document.getElementsByName("uppyResult")[0].value; y luego lo analizo con const obj = JSON.parse(json) .
¿Cómo elimino solo el índice donde id: uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772 y lo vuelvo a insertar como una cadena en el DOM?
Editar: la versión anterior tenía " en lugar de " value interno
Tu puedes hacer:
const data = [{ "successful":[ {"id":"uppy-a8geo/fw/400x400/jpg-1d-2v-1e-image/jpeg-10097-1626922525568"}, {"id":"uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772"} ], "failed":[], "uploadID":"ckss6e4xv00023h63uov94n5e" }] const idToRemove = "uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772" const result = data.map(obj => Object.entries(obj).reduce((a, [k, v]) => { a[k] = Array.isArray(v) ? v.filter(item => item.id !== idToRemove) : v return a }, {})) console.log(result) const data = [{ "successful":[ {"id":"uppy-a8geo/fw/400x400/jpg-1d-2v-1e-image/jpeg-10097-1626922525568"}, {"id":"uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772"} ], "failed":[], "uploadID":"ckss6e4xv00023h63uov94n5e" }]; const toRemove = "uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772"; data.forEach(item => { Object.values(item).forEach(array => { if (!Array.isArray(array)) return; const index = array.findIndex(elm => elm.id === toRemove); if (index > -1) array.splice(index, 1); }); }); console.log(data);No tenías muy claro lo que querías eliminar, pero estas son ambas posibilidades:
Se agregó un elemento adicional a la matriz de valores para fines de prueba.
let value='[{ \ "successful":[ \ {"id":"uppy-a8geo/fw/400x400/jpg-1d-2v-1e-image/jpeg-10097-1626922525568"}, \ {"id":"uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772"} \ ], \ "failed":[], \ "uploadID":"ckss6e4xv00023h63uov94n5e" \ },{ \ "successful":[ \ {"id":"uppy-a8geo/fw/400x400/jpg-1d-2v-1e-image/jpeg-10097-1626922525568"}, \ {"id":"not-uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772"} \ ], \ "failed":[], \ "uploadID":"some_other_id" \ }]' let data = JSON.parse(value) var filter_data = value => data.filter( ({successful}) => ! successful.find( ({id}) => id == value )) var filter_successful = value => data.map( elem => { elem = Object.assign( {}, elem ) // copy element to avoid mutation elem.successful = elem.successful.filter( ({id}) => id != value ) return elem }) console.log('Remove any object from the values array where the search id is in the successful array') console.log(filter_data('uppy-maxresdefault/jpg-1e-image/jpeg-81700-1626406845772')) console.log('Remove successful entries that match the search id from all values') console.log(filter_successful('uppy-a8geo/fw/400x400/jpg-1d-2v-1e-image/jpeg-10097-1626922525568')) Si quisiera eliminar cualquier objeto que coincidiera con el término de búsqueda de cualquier miembro de "valor" que fuera una matriz, entonces la técnica de @Amir MB es superior: .reduce() hace eso y también crea copias, evitando la mutación. Una vez más, no está claro si ese era un requisito.