如何在过滤管道中使用循环返回或推送值

时间:2018-02-19 01:50:45

标签: angular typescript

我创建过滤管道

@Pipe({name: 'filter'})
export class filterPipe implements PipeTransform {
transform(model: any[], query: number): any[] {
     return model.filter(listProductCatalog =>
        (listProductCatalog.items[0].quotaFlg == 'Y' || listProductCatalog.items[1].quotaFlg == 'Y' )

      );
}}}}

我需要知道如何为返回模型创建循环(或其他东西).filter listProductCatalog.items [i] 因为有时候物品有更多的0,1。同一产品目录的价值

 value for the same product catalog

{
    "listProductCatalog": [
        {
            "level1": "APPLE",
            "level2": "IPAD
RETINA 16GB", 		"priceIncAmt": 40000, 		"items": [{ 			"listSubItem":
[
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "SPECIAL PRODUCT",
            "brand": "APPLE",
            "model": "IPAD4 16 GB",
            "color": "WHITE",
            "stockQty": 100,
            "unitAmt": 1,
            "stepQty": 1,
            "quotaFlg": "Y",
            "tradeFlg": "Y"
        },
        {
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "SPECIAL PRODUCT",
            "brand": "APPLE",
            "color": "BLACK",
            "stockQty": 6,
            "unitAmt": 1,
            "stepQty": 1,
            "quotaFlg": "N",
            "tradeFlg": "N"
        }
    ]
},
{
    "level1": "APPLE",
    "level2": "IPAD RETINA 64GB",
    "priceIncAmt": 0,
    "items": [
        {
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "SPECIAL PRODUCT",
            "brand": "APPLE",
            "color": "BLACK",
            "stockQty": 5,
            "unitAmt": 0,
            "stepQty": 1,
            "quotaFlg": "N",
            "tradeFlg": "N"
        },
        {
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "SPECIAL PRODUCT",
            "brand": "APPLE",
            "color": "WHITE",
            "stockQty": 4,
            "unitAmt": 0,
            "stepQty": 1,
            "quotaFlg": "Y",
            "tradeFlg": "Y"
        }
    ]
},
{
    "level1": "APPLE",
    "level2": "IPAD RETINA 32GB",
    "priceIncAmt": 0,
    "items": [
        {
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "SPECIAL PRODUCT",
            "brand": "APPLE",
            "model": "IPAD4 32 GB",
            "color": "BLACK",
            "stockQty": 3,
            "unitAmt": 1,
            "stepQty": 1,
            "quotaFlg": "Y",
            "tradeFlg": "N"
        },
        {
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "SPECIAL PRODUCT",
            "brand": "APPLE",
            "color": "WHITE",
            "stockQty": 15,
            "unitAmt": 1,
            "stepQty": 1,
            "quotaFlg": "N",
            "tradeFlg": "Y"
        }
    ]
},
{
    "level1": "APPLE",
    "level2": "IPAD MINI 64GB",
    "priceIncAmt": 0,
    "items": [
        {
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "SPECIAL PRODUCT",
            "brand": "APPLE",
            "model": "IPAD MINI64GB",
            "color": "WHITE",
            "stockQty": 10,
            "unitAmt": 1,
            "stepQty": 1,
            "quotaFlg": "N",
            "tradeFlg": "N"
        },
        {
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "SPECIAL PRODUCT",
            "brand": "APPLE",
            "model": "IPAD MINI64GB",
            "color": "BLACK",
            "stockQty": 7,
            "unitAmt": 1,
            "stepQty": 1,
            "quotaFlg": "N",
            "tradeFlg": "N"
        }
    ]
},
{
    "level1": "APPLE",
    "level2": "IPHONE 4 16GB",
    "priceIncAmt": 0,
    "items": [
        {
            "groupMatNo": "PD1302003143",
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "HANDSET",
            "brand": "APPLE",
            "model": "IPHONE4 16GB",
            "color": "WHITE",
            "stockQty": 3,
            "unitAmt": 1,
            "stepQty": 1,
            "quotaFlg": "N",
            "tradeFlg": "N"
        },
        {
            "listSubItem": [
                {
                    "priceIncAmt": 0
                }
            ],
            "productType": "DEVICE",
            "productSubtype": "HANDSET",
            "brand": "APPLE",
            "model": "IPHONE4 16GB",
            "color": "BLACK",
            "stockQty": 7,
            "unitAmt": 0,
            "stepQty": 1,
            "quotaFlg": "N",
            "tradeFlg": "N"
        }
    ]
}
]
}

抱歉我的英文

谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

可以在js中使用map和filter函数。假设您只想返回项目,请按照以下方式进行操作。在MDN上阅读mapfilterreduce



  var jsonStr = "{\"listProductCatalog\":[{\"level1\":\"APPLE\",\"level2\":\"IPAD RETINA 16GB\",\"priceIncAmt\":40000,\"items\":[{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"SPECIAL PRODUCT\",\"brand\":\"APPLE\",\"model\":\"IPAD4 16 GB\",\"color\":\"WHITE\",\"stockQty\":100,\"unitAmt\":1,\"stepQty\":1,\"quotaFlg\":\"Y\",\"tradeFlg\":\"Y\"},{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"SPECIAL PRODUCT\",\"brand\":\"APPLE\",\"color\":\"BLACK\",\"stockQty\":6,\"unitAmt\":1,\"stepQty\":1,\"quotaFlg\":\"N\",\"tradeFlg\":\"N\"}]},{\"level1\":\"APPLE\",\"level2\":\"IPAD RETINA 64GB\",\"priceIncAmt\":0,\"items\":[{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"SPECIAL PRODUCT\",\"brand\":\"APPLE\",\"color\":\"BLACK\",\"stockQty\":5,\"unitAmt\":0,\"stepQty\":1,\"quotaFlg\":\"N\",\"tradeFlg\":\"N\"},{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"SPECIAL PRODUCT\",\"brand\":\"APPLE\",\"color\":\"WHITE\",\"stockQty\":4,\"unitAmt\":0,\"stepQty\":1,\"quotaFlg\":\"Y\",\"tradeFlg\":\"Y\"}]},{\"level1\":\"APPLE\",\"level2\":\"IPAD RETINA 32GB\",\"priceIncAmt\":0,\"items\":[{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"SPECIAL PRODUCT\",\"brand\":\"APPLE\",\"model\":\"IPAD4 32 GB\",\"color\":\"BLACK\",\"stockQty\":3,\"unitAmt\":1,\"stepQty\":1,\"quotaFlg\":\"Y\",\"tradeFlg\":\"N\"},{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"SPECIAL PRODUCT\",\"brand\":\"APPLE\",\"color\":\"WHITE\",\"stockQty\":15,\"unitAmt\":1,\"stepQty\":1,\"quotaFlg\":\"N\",\"tradeFlg\":\"Y\"}]},{\"level1\":\"APPLE\",\"level2\":\"IPAD MINI 64GB\",\"priceIncAmt\":0,\"items\":[{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"SPECIAL PRODUCT\",\"brand\":\"APPLE\",\"model\":\"IPAD MINI64GB\",\"color\":\"WHITE\",\"stockQty\":10,\"unitAmt\":1,\"stepQty\":1,\"quotaFlg\":\"N\",\"tradeFlg\":\"N\"},{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"SPECIAL PRODUCT\",\"brand\":\"APPLE\",\"model\":\"IPAD MINI64GB\",\"color\":\"BLACK\",\"stockQty\":7,\"unitAmt\":1,\"stepQty\":1,\"quotaFlg\":\"N\",\"tradeFlg\":\"N\"}]},{\"level1\":\"APPLE\",\"level2\":\"IPHONE 4 16GB\",\"priceIncAmt\":0,\"items\":[{\"groupMatNo\":\"PD1302003143\",\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"HANDSET\",\"brand\":\"APPLE\",\"model\":\"IPHONE4 16GB\",\"color\":\"WHITE\",\"stockQty\":3,\"unitAmt\":1,\"stepQty\":1,\"quotaFlg\":\"N\",\"tradeFlg\":\"N\"},{\"listSubItem\":[{\"priceIncAmt\":0}],\"productType\":\"DEVICE\",\"productSubtype\":\"HANDSET\",\"brand\":\"APPLE\",\"model\":\"IPHONE4 16GB\",\"color\":\"BLACK\",\"stockQty\":7,\"unitAmt\":0,\"stepQty\":1,\"quotaFlg\":\"N\",\"tradeFlg\":\"N\"}]}]}"

     var json = JSON.parse(jsonStr);
     var result = json.listProductCatalog
                 .reduce((a, b)=> a.concat(b.items.filter(i => i.quotaFlg === 'Y')), [])
                 .map(j => `${j.brand || ''} ${j.color || ''} ${j.model || ''}`);

     console.log(result);




这是一个小提琴:https://jsfiddle.net/jayas_godblessall/wg3h01ej/

根据这些内容,您可以随意修改,就像您希望整个对象从上方删除map一样,只需确保我在您的图片上捕获您的结果 < / p>

答案 1 :(得分:0)

就是这样,你可以这样做:

var resultData = model.listProductCatalog.filter(listProductCatalog => {
    listProductCatalog.items = listProductCatalog.items.filter(item =>     {
        if(item.quotaFlg === 'Y'){
            return true;
        }
    });
    return listProductCatalog.items.length > 0;
});

OR更短版本:

var resultData = model.listProductCatalog.filter(listProductCatalog => {
    listProductCatalog.items = listProductCatalog.items.filter(item => item.quotaFlg === 'Y');
    return listProductCatalog.items.length > 0;
});

请运行以下代码段并检查控制台输出:

&#13;
&#13;
var model = {
  "listProductCatalog": [
    {
      "level1": "APPLE",
      "level2": "IPAD RETINA 16GB",
      "priceIncAmt": 40000,
      "items": [
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "SPECIAL PRODUCT",
          "brand": "APPLE",
          "model": "IPAD4 16 GB",
          "color": "WHITE",
          "stockQty": 100,
          "unitAmt": 1,
          "stepQty": 1,
          "quotaFlg": "Y",
          "tradeFlg": "Y"
        },
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "SPECIAL PRODUCT",
          "brand": "APPLE",
          "color": "BLACK",
          "stockQty": 6,
          "unitAmt": 1,
          "stepQty": 1,
          "quotaFlg": "N",
          "tradeFlg": "N"
        }
      ]
    },
    {
      "level1": "APPLE",
      "level2": "IPAD RETINA 64GB",
      "priceIncAmt": 0,
      "items": [
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "SPECIAL PRODUCT",
          "brand": "APPLE",
          "color": "BLACK",
          "stockQty": 5,
          "unitAmt": 0,
          "stepQty": 1,
          "quotaFlg": "N",
          "tradeFlg": "N"
        },
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "SPECIAL PRODUCT",
          "brand": "APPLE",
          "color": "WHITE",
          "stockQty": 4,
          "unitAmt": 0,
          "stepQty": 1,
          "quotaFlg": "Y",
          "tradeFlg": "Y"
        }
      ]
    },
    {
      "level1": "APPLE",
      "level2": "IPAD RETINA 32GB",
      "priceIncAmt": 0,
      "items": [
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "SPECIAL PRODUCT",
          "brand": "APPLE",
          "model": "IPAD4 32 GB",
          "color": "BLACK",
          "stockQty": 3,
          "unitAmt": 1,
          "stepQty": 1,
          "quotaFlg": "Y",
          "tradeFlg": "N"
        },
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "SPECIAL PRODUCT",
          "brand": "APPLE",
          "color": "WHITE",
          "stockQty": 15,
          "unitAmt": 1,
          "stepQty": 1,
          "quotaFlg": "N",
          "tradeFlg": "Y"
        }
      ]
    },
    {
      "level1": "APPLE",
      "level2": "IPAD MINI 64GB",
      "priceIncAmt": 0,
      "items": [
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "SPECIAL PRODUCT",
          "brand": "APPLE",
          "model": "IPAD MINI64GB",
          "color": "WHITE",
          "stockQty": 10,
          "unitAmt": 1,
          "stepQty": 1,
          "quotaFlg": "N",
          "tradeFlg": "N"
        },
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "SPECIAL PRODUCT",
          "brand": "APPLE",
          "model": "IPAD MINI64GB",
          "color": "BLACK",
          "stockQty": 7,
          "unitAmt": 1,
          "stepQty": 1,
          "quotaFlg": "N",
          "tradeFlg": "N"
        }
      ]
    },
    {
      "level1": "APPLE",
      "level2": "IPHONE 4 16GB",
      "priceIncAmt": 0,
      "items": [
        {
          "groupMatNo": "PD1302003143",
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "HANDSET",
          "brand": "APPLE",
          "model": "IPHONE4 16GB",
          "color": "WHITE",
          "stockQty": 3,
          "unitAmt": 1,
          "stepQty": 1,
          "quotaFlg": "N",
          "tradeFlg": "N"
        },
        {
          "listSubItem": [
            {
              "priceIncAmt": 0
            }
          ],
          "productType": "DEVICE",
          "productSubtype": "HANDSET",
          "brand": "APPLE",
          "model": "IPHONE4 16GB",
          "color": "BLACK",
          "stockQty": 7,
          "unitAmt": 0,
          "stepQty": 1,
          "quotaFlg": "N",
          "tradeFlg": "N"
        }
      ]
    }
  ]
};

var resultData = model.listProductCatalog.filter(listProductCatalog => {
    listProductCatalog.items = listProductCatalog.items.filter(item =>     {
        if(item.quotaFlg === 'Y'){
            return true;
        }
    });
    return listProductCatalog.items.length > 0;
});

console.log(resultData);
&#13;
&#13;
&#13;