将具有相同数量对象的两个数组合并为一个数组

时间:2015-07-21 20:32:32

标签: jquery arrays merge

我有两个充满对象的数组,它看起来如此:

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') });
})

3 个答案:

答案 0 :(得分:0)

基本思想是循环并将对象连接在一起。在jQuery的帮助下,我们可以使用extend。

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()而不是创建新数组。

答案 1 :(得分:0)

基本上,您想扩展一个对象。为此,jQuery有一个名为.extend的方法。但是这里有一个问题,你有一个对象数组......

要解决此问题,您必须循环数组。您可以使用此代码(阅读注释以了解每一行):

&#13;
&#13;
devenv.exe /ResetUserData
&#13;
// 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))
&#13;
&#13;
&#13;

答案 2 :(得分: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