2015-07-21 73 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