Tengo una matriz de objetos,
var arr = [ {qty_auth: "", resolution: "4", status: "", order: "1495"}, {qty_sized: "1", resolution: "4", status: "", order: "1485"} ]Si el primero está vacío (por ejemplo, qty_auth), desea eliminar el objeto de la matriz en bucle. La primera es clave dinámica ya que qt_auth,qty_size es dinámica
Entonces la salida debe ser
var arr = [ {qty_sized: "1", resolution: "4", status: "", order: "1495"} ]No hay una secuencia particular en un objeto en JS, pero lo que puede hacer es verificar la existencia y filtrar solo el objeto que contiene qty_auth o qty_sized y no debe estar vacío "" . Puedes usar filter
var arr = [ { qty_auth: "", resolution: "4", status: "", order: "1495" }, { qty_sized: "1", resolution: "4", status: "", order: "1485" }, ]; const result = arr.filter((o) => o.qty_auth || o.qty_sized); console.log(result); EDITADO: si desea filtrar los objetos que comienzan con qty y que están vacíos, puede hacer lo siguiente:
var arr = [ { qty_auth: "", resolution: "4", status: "", order: "1495" }, { qty_sized: "1", resolution: "4", status: "", order: "1485" }, ]; const result = arr.filter((o) => Object.keys(o).some((k) => k.startsWith("qty") && o[k]) ); console.log(result);Array#filter , itere sobre la matrizqty_ . Puede hacer esto usando Object#keys , Array#find y String#startsWith . Si la clave existe pero su valor está vacío, devuelve false const arr = [ {qty_auth: "", resolution: "4", status: "", order: "1495"}, {qty_sized: "1", resolution: "4", status: "", order: "1485"} ]; const res = arr.filter(e => { const qtyKey = Object.keys(e).find(key => key.startsWith('qty_')); if(qtyKey && !e[qtyKey]) return false; return true; }); console.log(res);Nota: el orden de las claves en los objetos de JavaScript no está definido.
Como @EnricoMassone señaló a continuación, el orden de las entradas de los objetos aquí, que itero una vez que tengo mi objeto de la matriz (el ciclo forEach ) podría no ser el mismo que el declarado, por lo que puede ser un método controvertido. Para su información, verifico si la propiedad del primer objeto no está vacía y, de ser así, agrego el objeto completo a la matriz que devuelvo.
const removeEmpty = (arr) => { const arrToReturn = new Array(); arr.forEach((obj) => { if (Object.entries(obj)[0][1] === '') continue; else arrToReturn.push(obj); }); return arrToReturn; }