根据条件删除嵌套JSON中的元素

Remove elements inside nested JSON based on condition

本文关键字:元素 JSON 嵌套 条件 删除      更新时间:2023-09-26

下面是我的JSON对象,我想在其中从没有trips的组中删除groupType。即trips.length===0。如果该特定客户端对象的所有trips数组都为空,我还想删除整个客户端对象。。

let fruitsArray= [
        {
            "fruit": {
                "id": 1,
                "name": "Mango"
            },
            "group": [
                {
                    "groupType": {
                        "id": 1,
                        "name": "A"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 2,
                        "name": "B"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 3,
                        "name": "C"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 4,
                        "name": "D"
                    },
                    "trips": []
                }
            ]
        },
        {
            "fruit": {
                "id": 1,
                "name": "Apple"
            },
            "group": [
                {
                    "groupType": {
                        "id": 1,
                        "name": "A"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 2,
                        "name": "B"
                    },
                    "trips": [
                        {
                            "trip": {
                                "id": 62,
                                "deliverySlotId": 900000000000001
                            }
                        }
                    ]
                },
                {
                    "groupType": {
                        "id": 3,
                        "name": "C"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 4,
                        "name": "D"
                    },
                    "trips": []
                }
            ]
        },
        {
            "fruit": {
                "id": 95,
                "name": "Banana"
            },
            "group": [
                {
                    "groupType": {
                        "id": 4,
                        "name": "A1"
                    },
                    "trips": [
                        {
                            "trip": {
                                "id": 62,
                                "deliverySlotId": 900000000000001
                            }
                        },
                        {
                            "trip": {
                                "id": 63,
                                "deliverySlotId": 900000000000001
                            }
                        },
                        {
                            "trip": {
                                "id": 65,
                                "deliverySlotId": 900000000000001,
                                "orderId": 22
                            }
                        }
                    ]
                }
            ]
        }
    ]

我尝试过的代码返回了0 groupType的所有元素。。

 let finalArray = fruitsArray.map((group) => {
     return group.group.filter((trip) => {
        return trip.trips.length > 0;
     })                    
 })

您可以将map与filter结合使用。或者,您也可以使用reduce方法。

我在下面写了两个例子。

let fruitsArray= [
        {
            "fruit": {
                "id": 1,
                "name": "Mango"
            },
            "group": [
                {
                    "groupType": {
                        "id": 1,
                        "name": "A"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 2,
                        "name": "B"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 3,
                        "name": "C"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 4,
                        "name": "D"
                    },
                    "trips": []
                }
            ]
        },
        {
            "fruit": {
                "id": 1,
                "name": "Apple"
            },
            "group": [
                {
                    "groupType": {
                        "id": 1,
                        "name": "A"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 2,
                        "name": "B"
                    },
                    "trips": [
                        {
                            "trip": {
                                "id": 62,
                                "deliverySlotId": 900000000000001
                            }
                        }
                    ]
                },
                {
                    "groupType": {
                        "id": 3,
                        "name": "C"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 4,
                        "name": "D"
                    },
                    "trips": []
                }
            ]
        },
        {
            "fruit": {
                "id": 95,
                "name": "Banana"
            },
            "group": [
                {
                    "groupType": {
                        "id": 4,
                        "name": "A1"
                    },
                    "trips": [
                        {
                            "trip": {
                                "id": 62,
                                "deliverySlotId": 900000000000001
                            }
                        },
                        {
                            "trip": {
                                "id": 63,
                                "deliverySlotId": 900000000000001
                            }
                        },
                        {
                            "trip": {
                                "id": 65,
                                "deliverySlotId": 900000000000001,
                                "orderId": 22
                            }
                        }
                    ]
                }
            ]
        }
    ];
var filteredFruits = fruitsArray.map((fruit) => {
  fruit.group = fruit.group.filter((group) => group.trips.length);
  return fruit;
}).filter((fruit) => fruit.group.length);
console.log(filteredFruits);
// alternative example with reduce
var reducedFruits = fruitsArray.reduce((prev, next) => {
  next.group = next.group.filter((group) =>  group.trips.length);
  return next.group.length ? prev.concat([next]) : prev;
}, []);
console.log(reducedFruits);

   var fruitsArray= [
        {
            "fruit": {
                "id": 1,
                "name": "Mango"
            },
            "group": [
                {
                    "groupType": {
                        "id": 1,
                        "name": "A"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 2,
                        "name": "B"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 3,
                        "name": "C"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 4,
                        "name": "D"
                    },
                    "trips": []
                }
            ]
        },
        {
            "fruit": {
                "id": 1,
                "name": "Apple"
            },
            "group": [
                {
                    "groupType": {
                        "id": 1,
                        "name": "A"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 2,
                        "name": "B"
                    },
                    "trips": [
                        {
                            "trip": {
                                "id": 62,
                                "deliverySlotId": 900000000000001
                            }
                        }
                    ]
                },
                {
                    "groupType": {
                        "id": 3,
                        "name": "C"
                    },
                    "trips": []
                },
                {
                    "groupType": {
                        "id": 4,
                        "name": "D"
                    },
                    "trips": []
                }
            ]
        },
        {
            "fruit": {
                "id": 95,
                "name": "Banana"
            },
            "group": [
                {
                    "groupType": {
                        "id": 4,
                        "name": "A1"
                    },
                    "trips": [
                        {
                            "trip": {
                                "id": 62,
                                "deliverySlotId": 900000000000001
                            }
                        },
                        {
                            "trip": {
                                "id": 63,
                                "deliverySlotId": 900000000000001
                            }
                        },
                        {
                            "trip": {
                                "id": 65,
                                "deliverySlotId": 900000000000001,
                                "orderId": 22
                            }
                        }
                    ]
                }
            ]
        }
    ]

    for(var i=0;i<fruitsArray.length;i++){
     var currentFruit = fruitsArray[i];
     var currentFruitGroups = currentFruit.group;
         var foundTrip =false;
         for(var j=0;j<currentFruitGroups.length;j++){
                    var currentTrips = currentFruitGroups[j].trips;
                     if(!currentTrips.length){
                currentFruitGroups.splice(j,1);
                j--;
             }else{
                foundTrip = true;
             }
                }
          if(!foundTrip){
            fruitsArray.splice(i,1);
            i--;
          }
    }
    console.log(fruitsArray);

https://jsfiddle.net/485ue5zs/1/

let finalArray = fruitsArray.reduce((p, n) => {
  const gt = n.group.filter(g => g.trips.length);
  return gt.length ? p.concat({fruit: n.fruit, group: gt}) : p;
}, []);