繁体   English   中英

如果为空,则从对象数组中删除

[英]Remove from array of Object if Empty

我有一个对象数组,

var  arr = [
  1:{qty_auth: "", resolution: "4", status: "", order: "1495"}
  2:{qty_sized: "1", resolution: "4", status: "", order: "1485"}
]

如果第一个为空(例如:qty_auth),想要在循环中从数组中删除对象。 第一个是动态密钥,因为 qt_auth,qty_sized 是动态的

所以输出必须是

var  arr = [
  2:{qty_sized: "1", resolution: "4", status: "", order: "1495"}
]

JS 中的对象没有特定的顺序,但是您可以做的是检查是否存在并仅过滤掉包含qty_authqty_sized且不应为空的对象"" 您可以使用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);

正如下面的@EnricoMassone 所指出的,这里的对象条目的顺序,一旦我从数组中获得对象( forEach循环),我就会迭代它,可能与声明的不一样,所以它可能是一个有争议的方法。 仅供参考,我检查第一个对象属性是否不为空,如果是,我将整个对象添加到我返回的数组中。

const removeEmpty = (arr) => {
    const arrToReturn = new Array();

    arr.forEach((obj) => {
        if (Object.entries(obj)[0][1] === '') continue;
        else arrToReturn.push(obj);
    });

    return arrToReturn;
}

尝试这样的事情

const filtered = arr.filter(({ qty_auth, qty_sized }) => (qty_auth || qty_sized));

 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);

注意:javascript 对象中的键顺序是未定义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM