我有两个充满对象的数组,它看起来如此:
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') });
})
答案 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
的方法。但是这里有一个问题,你有一个对象数组......
要解决此问题,您必须循环数组。您可以使用此代码(阅读注释以了解每一行):
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;
答案 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 强>