2016-06-30 6 views
1

私はネストされた配列で複雑な配列を持っています。私は最後の配列からデータを取得したい場合、私は記述する必要がたとえば : partners[0].products[0].campaigns[0].nameCampaignまたは.typeまたは.priceなどJavaScriptでネストされた配列をどのようにフラット化できますか?

enter image description here

私はこの配列を平らにしたいと思います。これは私が期待するものです: enter image description here

それはまったく可能ですか?

var CAMPAIGN_NAME_PATH = ['partners', 0, 'products', 0, 'campaigns', 0, 'nameCampaig']; 
var campaignName = _.get(JSONObject, CAMPAIGN_NAME_PATH, 'optionalDefaultCampaignName'); 

それとも、flattenflattenDeepを再生してみてくださいとflattenDepthと並べ替えることができます:lodashから

[{ 
    "_id": "57727902d0a069e41a34eece", 
    "namePartner": "Self", 
    "products": [{ 
     "_id": "57727910d0a069e41a34eed0", 
     "nameProduct": "Singl", 
     "campaigns": [{ 
      "_id": "57727937d0a069e41a34eed1", 
      "type": "lead", 
      "nameCampaign": "Camp 0" 
     }] 
    }, { 
     "_id": "5774cb68c594b22815643b37", 
     "nameProduct": "DrugiPartner" 
     "campaigns": [{ 
      "_id": "5774cb78c594b22815643b38", 
      "type": "subscription", 
      "nameCampaign": "DrugaKampania" 
     }, { 
      "_id": "5774cbedc594b22815643b3a", 
      "type": "subscription", 
      "nameCampaign": "TrzeciaKampania" 
     }, { 
      "_id": "5774cbf9c594b22815643b3b", 
      "type": "subscription", 
      "nameCampaign": "CzwartaKampania" 
     }] 
    }, { 
     "_id": "5774cbdbc594b22815643b39", 
     "nameProduct": "Trzeci" 
     "campaigns": [] 
    }] 
}] 
+0

することができます 'はconsole.log(JSON.stringify(パートナーによる実際のオブジェクトの構造、 0、4)); '?出力を表示する – RomanPerekhrest

+0

Ok投稿を編集しました。 – DiPix

答えて

2

単純なJavascriptでは、必要な項目と配列への参照を持つ配列を使用して、反復的な再帰的アプローチを使用して目的の配列を得ることができます。

編集

複数のプロパティを追加するために、あなたが複数の項目のためのアレイを使用することができます。

1つの特性:

{ use: 'namePartner' } 

複数のプロパティ:

{ use: ['nameCampains', 'type'] } 

function iter(a, r, l) { 
 
    if (Array.isArray(a)) { 
 
     a.forEach(function (b) { 
 
      var use = level[l].use, 
 
       rr = JSON.parse(JSON.stringify(r)); 
 
      (Array.isArray(use) && use || [use]).forEach(function (c) { 
 
       rr[c] = b[c]; 
 
      }); 
 
      iter(b[level[l].array], rr, l + 1); 
 
     }); 
 
     return; 
 
    } 
 
    result.push(r); 
 
} 
 

 
var partners = [{ namePartner: 'Tesco', products: [{ nameProduct: 'New', campains: [{ nameCampains: 'Apple', type: 'appleType' }, { nameCampains: 'Lenovo', type: 'lenovoType' }] }] }, { namePartner: 'Eko', products: [{ nameProduct: 'Fresh', campains: [{ nameCampains: 'Asus', type: 'asusType' }, { nameCampains: 'Dell', type: 'dellType' }] }, { nameProduct: 'new', campains: [{ nameCampains: 'Samsung', type: 'samsungType' }] }] }], 
 
    level = [{ use: 'namePartner', array: 'products' }, { use: 'nameProduct', array: 'campains' }, { use: ['nameCampains', 'type'] }], 
 
    result = []; 
 

 
iter(partners, {}, 0); 
 
console.log(result);

+0

camping配列から 'type'を追加したい場合、私は何を変更すべきでしょうか? – DiPix

+0

私が忘れた最後のこと。 [ [ namePartner: "テスコ"、 nameProduct: "新"、 nameCampaign: "アップル"、 タイプ: "appleType" ] ...] ' :私は、この形式を好む'結果として、 – DiPix

-1

あなたが使用することができget


@EDIT これはconsole.log(JSON.stringify(partners, 0, 4));の一部です。最初のJSONオブジェクト構造これらの3つのメソッドはキー値オブジェクトではなく配列に対してのみ機能することに注意してください。

関連する問題