2015-07-21 118 views
0

我有兩個陣列填充對象,它看起來像這樣:合併兩個陣列具有相等數量的對象成一個陣列

ArrayYear

Array [ year: "1977", year: "1980"... ] 
Object { year: "1977" } 

ArrayMeal

Array [ meal: "carrot", meal: "beef"... ] 
Object { meal: "carrot" } 

如何將兩個數組合併爲一個看起來像這樣的數組?

Array [ {year: "1977", meal: "carrot"}, {year: "1980", meal: "beef"}... ] 

兩個陣列被填充爲這樣:

arrayYear = []; 
$('.item-year').each(function(index){ 
    arrayYear.push({ year: $(this).attr('data-year') }); 
}) 

arrayMeal = []; 
$('.item-meal').each(function(index){ 
    arrayMeal.push({ meal: $(this).attr('data-meal') }); 
}) 
+1

什麼實際arrayYear和arrayMeal是什麼樣子?我很困惑你對他們的描述。 – epascarello

+0

試圖添加一些更多的信息,不知道它是否有幫助 – user1231561

+0

你顯示的「數組」不是有效的JavaScript數組。你的意思是數組看起來像'[「1977」,「1980」,...]'? –

回答

0

基本思想是遍歷和對象的concat在一起。在jQuery的幫助下,我們可以使用擴展。

var ArrayYear = [ { year: "1977" }, {year: "1977" }]; 
 
var ArrayMeal = [ { meal: "carrot" }, {meal: "beef" }]; 
 

 
var array = ArrayYear.map(function (obj, index) { 
 
    return $.extend({}, obj, ArrayMeal[index]); 
 
}); 
 
console.log(array);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

現在跟你貼什麼,也沒有必要,除非你需要它來建立兩個數組。

var years = $('.item-year'); 

var arrayOut = []; 
$('.item-meal').each(function(index){ 
    arrayOut.push({ meal: $(this).attr('data-meal'), year : years.eq(index).attr('data-year') }); 
}); 

可以使用map()而不是創建一個新的數組。

0

基本上,你想擴展一個對象。爲此,jQuery有一個名爲.extend的方法。但有一個問題就在這裏,你有對象的數組...

爲了解決這個問題,你必須循環數組。您可以使用此代碼(閱讀評論,瞭解各行):

// Assign first array 
 
var arr1=[{year:1992},{year:1996},{year:2000}]; 
 
// Assign second array 
 
var arr2=[{meat:'beef'},{meat:'porc'},{meat:'chicken'},{meat:'robot'}]; 
 

 
// Declare the resulting array (prevent from alterring the original arrays) 
 
var merged_arr = [] 
 

 
// Loop the array 
 
// We use Math.max so it work if 1 array has more items 
 
for(var i = 0; i < Math.max(arr1.length, arr2.length); i++){ 
 
    // Set merged_arr cell's 1 to a new object which is a merge of both objects 
 
    // First arg is an empty object so no arrays are alterred 
 
    merged_arr[i] = $.extend({}, arr1[i], arr2[i]); 
 
} 
 

 
// Alert the result 
 
alert(JSON.stringify(merged_arr))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

因爲它們是相同的長度,你也許並不需要建立兩個數組,可以在一次做你通過匹配的元素索引的DOM的電流回路

var $meals=$('.item-meal'); 

var fullArray = $('.item-year').map(function(idx){ 
    return { 
     year: $(this).data('year') , 
     meal: $meals.eq(idx).data('meal') 
    } 
}).get(); 

這是假設你只針對合併之後他們

的目的創建原始陣列

DEMO