简体   繁体   English

合并Java数组中的对象

[英]Merge objects in arrays in Javascript

I have three objects in two arrays: 我有两个数组中的三个对象:

var tab1 = [{"foo":"bar"}, {"foo2":"bar2"}, {"foo3":"bar3"} ];

var tab2 = [ {"2foo":"2bar"}, {"2foo2":"2bar2"}, {"2foo3":"2bar3"} ];

My goal is merge that arrays like this: 我的目标是合并这样的数组:

 var tab3 = [ {"foo":"bar", "2foo":"2bar"},  {"foo2":"bar2",
 "2foo2":"2bar2"},  {"foo3":"bar3", "2foo3":"2bar3"}  ];

How can I do this? 我怎样才能做到这一点?

If you're using jQuery, you can use jQuery.extend() . 如果您使用的是jQuery,则可以使用jQuery.extend()

It does exactly what you want. 它正是您想要的。

Example: 例:

for (var i = 0; i < tab1.length; i++) {
    tab1[i] = $.extend(tab1[i], tab2[i]);
}

Here's a fiddle: http://jsfiddle.net/fCx9C/2/ 这是一个小提琴: http : //jsfiddle.net/fCx9C/2/

If you don't want to use jQuery, you can see how they implement jQuery.extend() here . 如果您不想使用jQuery,则可以在此处查看它们如何实现jQuery.extend()

If you do want to use jQuery, here's the jQuerified loop: 如果您确实想使用jQuery,这是jQuerified循环:

$.each(tab1, function (i, t) {
    t = $.extend(t, tab2[i]);
});

Demo 演示

function merge(obj1, obj2) {
    var tmp = {};
    for (var key in obj1) {
        tmp[key] = obj1[key];
    };
    for (key in obj2) {
        tmp[key] = obj2[key];
    };
    return tmp;
};

function zip(arr1, arr2) {
    var tmp = [];
    for (var i = 0, len = arr1.length; i < len; i++) {
        tmp[i] = merge(arr1[i], arr2[i]);
    };
    return tmp;
};

var tab1 = [{"foo":"bar"}, {"foo2":"bar2"}, {"foo3":"bar3"} ];

var tab2 = [ {"2foo":"2bar"}, {"2foo2":"2bar2"}, {"2foo3":"2bar3"} ];

console.log(zip(tab1, tab2));

This should do what you want: 这应该做您想要的:

var merge = function(t1, t2) { 
    var arr = []; 
    for(i=0; i<t1.length; i++) { 
        for(var prop in t2[i]) { 
            arr.push(t1[i]); 
            arr[i][prop] = t2[i][prop]; 
        } 
    } 
    return arr; 
}

var tab3 = merge(tab1, tab2);

This can be done in vanilla JavaScript quite nicely: 这可以在原始JavaScript中很好地完成:

var tab1 = [{"foo":"bar"}, {"foo2":"bar2"}, {"foo3":"bar3"} ];
var tab2 = [ {"2foo":"2bar"}, {"2foo2":"2bar2"}, {"2foo3":"2bar3"} ];
var tab3 = [];
for(var i = 0; i < 3; i++) {
    for(var j in tab2[i]) {
        tab1[i][j] = tab2[i][j];
    }
    tab3.push(tab1[i]);
}
console.log(tab3);

However, you don't even have to create a tab3 array as it puts everything nicely into tab1 already. 但是,您甚至不必创建tab3数组,因为它已经将所有内容很好地放入了tab1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM