2016-08-17 80 views
-1

我有多個數組,我想將所有數組的數據合併到一個對象數組中。 所有的數據將在關鍵的基礎上合併,以便如何製作一個生產級別代碼,以便合併所有數據。如何在JavaScript中合併多個數組?

results[0]= 
    [ {categoryGroupID: '1231',categoryID: '12311',categoryName: 'External'}, 
    {categoryGroupID: '1231',categoryID: '12312',categoryName: 'Internal'}, 
    {categoryGroupID: '1231',categoryID: '141414141',categoryName: ''}, 
    {categoryGroupID: '1232',categoryID: '12321',categoryName: 'Style'}, 
    {categoryGroupID: '1233',categoryID: '123222',categoryName: ''}, 
    {categoryGroupID: '1233',categoryID: '12331',categoryName: 'Customer Satisfaction'}] 

results[1]= 
    [ { categoryGroupID: '1231',categoryGroupName: 'Store ambience'}, 
    { categoryGroupID: '1232',categoryGroupName: 'Communication'}, 
    {categoryGroupID: '1233',categoryGroupName: 'Overall Satisfaction'}, 
    {categoryGroupID: '12331',categoryGroupName: null}] 


results[2]= 
    [ {categoryID: '12311',questionID: '12311111',questionName: 'tell me snything'}, 
    {categoryID: '12312',questionID: '12311113',questionName: 'whatever'}, 
    {categoryID: '12311',questionID: '123ques',questionName: 'ashjsh'}, 
    {categoryID: '12311',questionID: '123test',questionName: null}] 

results[3]= 
    [ { questionID: '12311113',choiceID: '1231111111',choiceValue: 'good'}, 
    { questionID: '12311113',choiceID: '1231111112',choiceValue: 'very good'}, 
    {questionID: '12311113',choiceID: '12311113113',choiceValue: 'bad'}] 

我的輸出應該喜歡這個所以怎麼辦呢

"categoryGroup": 
[ 
{"categoryGroupID": "1231","categoryGroupName": "Store ambience", 
"category": [ 
    {"categoryID": "12312","categoryName": "Internal", 

       "question": [ 
       {"questionID": "12311113","questionName": "whatever", 
         "choice": [ 
         {"choiceID": "1231111111","choiceValue": "good"}, 
         {"choiceID": "1231111112","choiceValue": "very good"}, 
         {"choiceID": "12311113113","choiceValue": "bad",} 
           ], 
      }] 
     }, 
    {"categoryID": "12311","categoryName": "External", 

      "question": [ 
       {"questionID": "12311111","questionName": "tell me snything",}, 
       {"questionID": "123ques","questionName": "ashjsh",}, 
       {"questionID": "123test","questionName": null,} 
      ]}, 
    {"categoryID": "141414141","categoryName": "",}] 
    }, 

{"categoryGroupID": "1232","categoryGroupName": "Communication",  
"category": [ 
    {"categoryID": "12321","categoryName": "Style"}] 
    }, 

{"categoryGroupID": "1233","categoryGroupName": "Overall Satisfaction", 
"category": [ 
    {"categoryID": "123222","categoryName": "",}, 
    {"categoryID": "12331","categoryName": "Customer Satisfaction",}] 
    }, 

{"categoryGroupID": "12331","categoryGroupName": null} 
] 
+0

我不認爲有任何出香草JS –

+0

這種情況的現成的解決方案。然後如何使用地圖或的foreach或任何其他概念解決這個問題,你可以幫我解決這個? – ASN

+0

看看那個:http://stackoverflow.com/questions/17500312/is-there-some-way-i-can-join-the-contents-of-two-javascript-arrays-much-like-i ,也許它可以幫助 –

回答

1

沒有進入的這一切,怎麼你的深度幾乎需要手動處理所有的情況下,這裏是一個例子,它如何可以工作(可能不應該工作)。

這是基於索引(0,1,2,3)的結果將始終相同並採用filtermapArray函數。對於性能,我不確定這將在大場景中有多好。

var results = {}; 
 

 
results[0] = 
 
    [{ categoryGroupID: '1231', categoryID: '12311', categoryName: 'External' }, 
 
    { categoryGroupID: '1231', categoryID: '12312', categoryName: 'Internal' }, 
 
    { categoryGroupID: '1231', categoryID: '141414141', categoryName: '' }, 
 
    { categoryGroupID: '1232', categoryID: '12321', categoryName: 'Style' }, 
 
    { categoryGroupID: '1233', categoryID: '123222', categoryName: '' }, 
 
    { categoryGroupID: '1233', categoryID: '12331', categoryName: 'Customer Satisfaction' }]; 
 

 
results[1] = 
 
    [{ categoryGroupID: '1231', categoryGroupName: 'Store ambience' }, 
 
    { categoryGroupID: '1232', categoryGroupName: 'Communication' }, 
 
    { categoryGroupID: '1233', categoryGroupName: 'Overall Satisfaction' }, 
 
    { categoryGroupID: '12331', categoryGroupName: null }]; 
 

 

 
results[2] = 
 
    [{ categoryID: '12311', questionID: '12311111', questionName: 'tell me snything' }, 
 
    { categoryID: '12312', questionID: '12311113', questionName: 'whatever' }, 
 
    { categoryID: '12311', questionID: '123ques', questionName: 'ashjsh' }, 
 
    { categoryID: '12311', questionID: '123test', questionName: null }]; 
 

 
results[3] = 
 
    [{ questionID: '12311113', choiceID: '1231111111', choiceValue: 'good' }, 
 
    { questionID: '12311113', choiceID: '1231111112', choiceValue: 'very good' }, 
 
    { questionID: '12311113', choiceID: '12311113113', choiceValue: 'bad' }]; 
 

 

 

 
var o = { 
 
    categoryGroup: results[1].map(function (categoryGroup) { 
 
     var categoryGroup = { 
 
      categoryGroupID: categoryGroup.categoryGroupID, 
 
      categoryGroupName: categoryGroup.categoryGroupName 
 
     }; 
 

 
     categoryGroup['category'] = results[0].filter(function (item) { return item.categoryGroupID == categoryGroup.categoryGroupID }) 
 
               .map(function (item) { 
 
                return { 
 
                 categoryId: item.categoryID, 
 
                 categoryName: item.categoryName, 
 
                 question: results[2].filter(function (ques) { return ques.categoryID == item.categoryID }) 
 
                      .map(function (ques) { 
 
                       return { 
 
                        questionId: ques.questionID, 
 
                        questionName: ques.questionName, 
 
                        choice: results[3].filter(function (ch) { return ch.questionID == ques.questionID }) 
 
                            .map(function (ch) { 
 
                             return { 
 
                              choiceID: ch.choiceID, 
 
                              choiceValue: ch.choiceValue 
 
                             } 
 
                            }) 
 
                       } 
 
                      }) 
 
                }; 
 
               }); 
 
     return categoryGroup; 
 
    }) 
 
}; 
 
console.log(o);

-2

看到這個- >How to merge two arrays in Javascript and de-duplicate items

var array1 = ["1","2"]; 
var array2 = ["3", "4"]; 

var array3 = array1.concat(array2); // Merges both arrays 
// [ '1', '2', '3', '4' ] 

爲Apache Commons Lang中數組utils的看到這個- >How can I concatenate two arrays in Java?

JS版本道場http://dojotoolkit.org/reference-guide/1.10/dojo/_base/array.htmlUTIL陣列https://www.npmjs.com/package/util-array

這是另外一個道場例如http://dojo-toolkit.33424.n3.nabble.com/How-to-concatenate-arrays-in-Dojo-td3744293.html

http://wiki.servicenow.com/index.php?title=ArrayUtil

+0

但我使用JavaScript – ASN

+0

OP希望他的解決方案'Javascript' –