2016-08-05 1 views
0

Ниже мой объект JSON, в котором я хочу удалить groupType из группы, в которой dosen't есть trip.ie., . Также также необходимо удалить весь клиентский объект, если все массив поездки пуст для этого конкретного объекта клиента ..Удалить элементы внутри вложенного JSON на основании условия

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; 
    })      
}) 
+0

вы также хотите, чтобы удалить весь плод, если нет поездки в нем? – JuHwon

+0

да @ JuHwon.The весь плод – forgottofly

+0

Вместо карты можно использовать сокращение и условно нажать объект, если группа оленьей кожи, поездки 'пусть finalArray = fruitsAray.reduce ((Реза, группа) => { возвращение res.concat (group.group.filter ((trip) => { return trip.trips.length> 0; }) || []); }, []) ' Я не тестировал код. Надеюсь, вы поняли эту идею. – z0mBi3

ответ

1

Вы можете использовать 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);

1
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/

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; 
}, []); 
Смежные вопросы