Así que tengo un objeto dentro de un archivo json como este:
{ "0": { "damage_type": "Scratch", "regions": [] }, "1": { "damage_type": "Dent", "regions": [] }, "2": { "damage_type": "Dent", "regions": [ "front side", "front window" ] } } Lo que estoy tratando de lograr es eliminar el objeto que tiene regions vacías. Como esto:
{ "2": { "damage_type": "Dent", "regions": [ "front side", "front window" ] } }Estoy usando un bucle for y sigo sin éxito:
jsonfile.readFile(theJsonFile, function (err, obj) { if (err) console.error(err) for (var i = 0; i <= Object.keys(obj).length - 1; i++) { if (obj[i].damage_type.length < 1) { delete obj[i] } } }¿Algunas ideas?
Llamando a los damages del valor analizado en lugar de obj , puede tomar todas las entradas como pares clave/valor, iterar sobre ellos y eliminar los "daños" sin región por sus ID:
Object.entries(damages).forEach(([id, damage]) => { if (!damage.regions.length) { delete damages[id]; } });Alternativamente, puede crear una estructura completamente nueva sin tocar la estructura original:
const entries = Object.entries(damages); const filteredEntries = entries.filter(([_, damage]) => damage.regions.length); const filteredDamages = Object.fromEntries(filteredEntries);En este caso, primero necesita una matriz. Para convertir objetos en matrices, use la entrada de entrada
let obj = { "0": { "damage_type": "Scratch", "regions": [] }, "1": { "damage_type": "Dent", "regions": [] }, "2": { "damage_type": "Dent", "regions": [ "front side", "front window" ] } }matriz de conversión:
const myentry= Object.entries(obj);Ahora, la mejor manera de eliminar o filtrar una matriz es usar el método de filtro y, a cambio, obtener el otro objeto que tiene un valor de filtro.
const myFiletrObj = myentry.filter(([_, obj]) => obj.regions.length).reduce(withObjectAssign, {}) function withObjectAssign(object, [key, value]) { return Object.assign(object, {[key]: value}) }Esto le dará una salida filtrada.
Puede eliminar un nodo json por su clave
var json = { ... }; var key = "foo"; delete json[key]; // Removes json.foo from the dictionary.