繁体   English   中英

如果内部对象为空,则删除对象数组

[英]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);

但它现在给了我任何输出

 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.

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