2016-08-05 8 views
0

に基づいて入れ子になったJSON内の要素を削除する以下は、私がJSONオブジェクトを削除したいと考えるグループです(trips.ieを持っていないグループからgroupTypeを削除したい場合は、trips.length===0)。配列は、その特定のクライアントオブジェクトのための空で旅行..条件が

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

あなたが減らすことができ、グループが旅行を持っていない場合、条件付きでオブジェクトを押してマップを使用することができます 'let finalArray = fruitsAray.reduce((res、group)=> { return res.concat (group.group.filter((trip)=> { return trip.trips.length> 0; })|| []); }、[]) ' 私はコードをテストしなかった。私はあなたがそのアイデアを得ることを望みます。 – z0mBi3

答えて

1

あなたはと組み合わせるmapを使用することができます。 また、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; 
}, []);