[英]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_auth
或qty_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));
Array#filter
,遍历数组qty
开头的键。 您可以使用Object#keys
、 Array#find
和String#startsWith
来做到这一点。 如果键存在但其值为空,则返回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);
注意:javascript 对象中的键顺序是未定义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.