Loda sh: фильтр нескольких свойств - PullRequest
1 голос
/ 10 января 2020

Я новичок в loda sh.

У меня проблемы с фильтрацией loda sh. У меня есть глубоко вложенный json объект, который я хочу отфильтровать, если productName = 'Lotto' и board selectionMethod = "AUTOPICK"

Когда я пробую решение, приведенное ниже, оно возвращает все результаты вместо фильтрации. Я пытался сделать это несколькими способами, но все результаты всегда возвращались.

Может ли кто-нибудь предложить предложение?

var results = {

"buyTicketDetails": {
    "result": 0,
    "message": "Success",
    "product": [
        {
            "productName": "Lotto",
            "displayPromoMessage": false,
            "drawDetails": [
                {
                    "drawTypeDescription": "REGULAR DRAW",
                    "drawAttribute": "EVENING",
                    "drawStartDate": "2019-01-12T00:00:00.000-05",
                    "drawEndDate": "2019-01-12T00:00:00.000-05"
                },
                {
                    "drawTypeDescription": "SPECIAL DRAW",
                    "drawAttribute": "EVENING",
                    "drawStartDate": "2019-01-12T00:00:00.000-05",
                    "drawEndDate": "2019-01-12T00:00:00.000-05"
                }
            ],
            "board": [
                {
                    "boardType": "REGULAR",
                    "selectionMethod": "AUTOPICK",
                    "selectionSet": [
                        "2",
                        "4",
                        "10",
                        "12",
                        "17",
                        "31"
                    ]
                },
                {
                    "boardType": "RAFFLE",
                    "selectionMethod": "SYSTEMPICK",
                    "selectionSet": [
                        "40001722-01"
                    ]
                }
            ]
        },
        {
            "productName": "Encore",
            "displayPromoMessage": false,
            "drawDetails": [
                {
                    "drawTypeDescription": "REGULAR DRAW",
                    "drawAttribute": "EVENING",
                    "drawStartDate": "2019-01-12T00:00:00.000-05",
                    "drawEndDate": "2019-01-12T00:00:00.000-05"
                }
            ],
            "board": [
                {
                    "boardType": "REGULAR",
                    "selectionMethod": "SYSTEMPICK",
                    "selectionSet": [
                        "3440514"
                    ]
                }
            ]
        }
    ]
  }
}    

const filterCat = _.filter(results, { product: [
{ 
    productName: "Lotto", 
    board: {
        selectionMethod: "AUTOPICK"
    }}
    ] 
}
);

console.log(filterCat);

1 Ответ

0 голосов
/ 12 января 2020

С Pure JS.

Вы можете сделать это также с функцией фильтра Javascript.

Функция фильтра на самом деле работает с массивами, поэтому мы сначала используем карту l oop для добавления объектов в массивы, а затем используем функцию фильтра для получения только тех данных, которые нам нужны!.

let Product = results.buyTicketDetails.product

let getSelectionMethods=(index) => Product[index].board.map((d,i)=>d.selectionMethod)

let  getTargetedProducts =(Name,Method)=> Product.map((d,i)=>{
  if(Product[i].productName==Name && getselectionMethods(i).indexOf(Method) !==-1){
            return d
    }
})


let FilteredProducts = getTargetedProducts("Lotto","AUTOPICK").filter((d)=>d !==undefined)

console.log(FilteredProducts)

...