[英]Remove array of object if object inside is empty
我正在准备这样的数组
datas[5] = { "qty_sized": "1", "resolution": "5", "status": "", "order": 1342 };
其中 [5] 是动态的响应。
我有和对象 mydata 并且在里面我有一个对象项目。
我将数组推送到对象项,并分配
Object.assign(mydatadata.items, datas);
现在 mydata.items 有一个数组集,`
items{
1 {qty_auth: "", resolution: "4", status: "", order: "1495"},
5 {qty_sized: "1", resolution: "4", status: "", order: "1485"}
}`
现在如果 qty_auth: "" ,我需要从中检查 qty_ 是否为空,然后删除数组。 所以预期的输出是这样的: 注意:qty_ 在这里是动态的。
items{ 5 {qty_sized: "1", resolution: "4", status: "", order: "1485"} }
我想在同一个对象 mydata.items 中得到结果
我尝试过这样的事情
const mydatadata.items = mydata.items.filter((o) =>
Object.keys(o).some((k) => k.startsWith("qty") && o[k])
);
console.log(result);
但它现在给了我任何输出
Object#entries
,获取items
的键值对Array#filter
,遍历上面的数组qty_
开头且值不为空的键。 您可以使用Object#keys
、 Array#some
和String#startsWith
来做到这一点。Object#fromEntries
,将过滤后的对再次转换为对象。 const obj = { items: { 1: {qty_auth: "", resolution: "4", status: "", order: "1495"}, 5: {qty_sized: "1", resolution: "4", status: "", order: "1485"} } }; obj.items = Object.fromEntries( Object.entries(obj.items) .filter(([_, item]) => Object.keys(item).some(key => key.startsWith('qty_') && item[key]) ) ); console.log(obj);
你在谈论一个数组,但使用大括号而不是方括号。 为了 filter() 工作,它必须看起来像:
mydata = {
items: [
{qty_auth: "", resolution: "4", status: "", order: "1495"},
{qty_sized: "1", resolution: "4", status: "", order: "1485"}
]
}
假设它是一个实际的数组,“const mydatadata.items”仍然存在问题,或者至少它会给我一个错误,因为 mydatadata 没有初始化。 除非它是一个错字并且它应该是 mydata,但是你会重新声明它。 所以取决于你想要什么:
mydata.items = mydata.items.filter((o) =>
Object.keys(o).some((k) => k.startsWith("qty") && o[k])
);
或者
let mydatadata = {};
mydatadata.items = mydata.items.filter((o) =>
Object.keys(o).some((k) => k.startsWith("qty") && o[k])
);
此外,您将结果存储在 mydatadata 中,但您正在记录变量结果。 所以根据前面的答案:
console.log(mydatadata);
或者
console.log(mydata);
这是一个小提琴: https ://jsfiddle.net/b57qa82d/
您可能应该只使用数组而不是对象。 当您不断更改术语来描述您的数据时,您的问题并不清楚您需要什么结构。 例如:“现在mydata.items
有一个数组集”但您的代码说它应该是带有键的对象,而不是数组。
所以我建议:将您的数据放入一个数组中,并通过遍历每个对象的条目并检查是否有任何以“qty”开头的键的值不是空字符串来filter
它。 然后,您可以将该过滤后的数组分配给myObject.items
。
const data = [ { "qty_sized": "0", "resolution": "5", "status": "", "order": 2 }, { "qty_auth": "", "resolution": "5", "status": "", "order": 3 }, { "qty_auth": "1", "resolution": "5", "status": "", "order": 1342 }, { "qty_sized": "", "resolution": "2", "status": "", "order": 1 }, { "qty_sized": "1", "resolution": "1", "status": "", "order": 142 }]; const filtered = data.filter(obj => { return Object.entries(obj).find(([key, value]) => { return key.startsWith('qty') && value; }); }); const myObject = { items: filtered }; console.log(myObject);
附加文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.