Javascript 连接对象数组

Javascript 连接对象数组,javascript,arrays,object,join,merge,Javascript,Arrays,Object,Join,Merge,我以前问过这个问题,但似乎解决方案不太管用 我有两个目标: var a = [{ x: 0, y: 0, color: "green", value: undefined, weight: 1 }, { x: 0, y: 1, color: "red", value: undefined, weight: 1 }]; var b = [{ x: 0, y: 0, value: 1}, { x: 0, y: 1, value: 3}]; 我想将它们合并到一个对象中,如下所示: var c

我以前问过这个问题,但似乎解决方案不太管用

我有两个目标:

var a = [{ x: 0, y: 0, color: "green", value: undefined, weight: 1 }, { x: 0, y: 1, color:   "red", value: undefined, weight: 1 }];

var b = [{ x: 0, y: 0, value: 1}, { x: 0, y: 1, value: 3}];
我想将它们合并到一个对象中,如下所示:

var c = [{ x: 0, y: 0, color: "green", value: 1, weight: 1 }, { x: 0, y: 1, color: "red", value: 3, weight: 1 }];
var a = [{ x: 0, y: 0, color: "green", value: undefined, weight: 1 }, { x: 0, y: 1, color:   "red", value: undefined, weight: 1 }];

var b = [{ x: 0, y: 0, value: 1, weight: 1 }, { x: 0, y: 1, value: 3, weight: 1 }];


function merge_objects(o1, o2) {
    Object.keys(o2).forEach(
        function(key) {
            o1[key] = o2[key];
        });
}

function merge(a, b) {
    if (a.length != b.length) {
        throw new Error();
    }
    for (var ix=0; ix<a.length; ix++) {
        merge_objects(a[ix], b[ix]);
    }
}
注意:数组A总是有25个条目,而数组b则没有

提议的解决办法是:
var extendedArray=$.extend({},a,b)

但是,这会生成一个由两个条目组成的数组,其中并不是所有的值都被保留

我还尝试了以下功能:

var e = $.merge(a, b);
var output = a.concat(b);

function jsonConcat(o1, o2) {
    for (var key in o2) {
        o1[key] = o2[key];
    }
    return o1;
}



var c = {};
c = jsonConcat(c, a);
c = jsonConcat(c, b);

任何帮助或推动正确的方向将非常感谢

$.extend
如果没有将第一个参数设置为
true
将只合并对象的“第一级”。如果您的属性仅为字符串和数字,则它可以工作,但如果某些属性为对象,则可能导致意外行为

我想您正在寻找
$.extend(true,obj1,obj2)

有关详细信息,请参阅


第一个参数
true
告诉方法以递归方式执行“深度”复制。

$。如果不将第一个参数设置为
true
,extend
将只合并对象的“第一级”。如果您的属性仅为字符串和数字,则它可以工作,但如果某些属性为对象,则可能导致意外行为

我想您正在寻找
$.extend(true,obj1,obj2)

有关详细信息,请参阅


第一个参数
true
告诉方法以递归方式执行“深度”复制。

$。如果不将第一个参数设置为
true
,extend
将只合并对象的“第一级”。如果您的属性仅为字符串和数字,则它可以工作,但如果某些属性为对象,则可能导致意外行为

我想您正在寻找
$.extend(true,obj1,obj2)

有关详细信息,请参阅


第一个参数
true
告诉方法以递归方式执行“深度”复制。

$。如果不将第一个参数设置为
true
,extend
将只合并对象的“第一级”。如果您的属性仅为字符串和数字,则它可以工作,但如果某些属性为对象,则可能导致意外行为

我想您正在寻找
$.extend(true,obj1,obj2)

有关详细信息,请参阅


第一个参数
true
告诉方法以递归方式执行“深度”复制。

假设两个数组具有相同的长度,就地合并可以是这样的:

var c = [{ x: 0, y: 0, color: "green", value: 1, weight: 1 }, { x: 0, y: 1, color: "red", value: 3, weight: 1 }];
var a = [{ x: 0, y: 0, color: "green", value: undefined, weight: 1 }, { x: 0, y: 1, color:   "red", value: undefined, weight: 1 }];

var b = [{ x: 0, y: 0, value: 1, weight: 1 }, { x: 0, y: 1, value: 3, weight: 1 }];


function merge_objects(o1, o2) {
    Object.keys(o2).forEach(
        function(key) {
            o1[key] = o2[key];
        });
}

function merge(a, b) {
    if (a.length != b.length) {
        throw new Error();
    }
    for (var ix=0; ix<a.length; ix++) {
        merge_objects(a[ix], b[ix]);
    }
}
var a=[{x:0,y:0,颜色:“绿色”,值:未定义,权重:1},{x:0,y:1,颜色:“红色”,值:未定义,权重:1}];
var b=[{x:0,y:0,值:1,权重:1},{x:0,y:1,值:3,权重:1}];
函数合并对象(o1,o2){
对象。键(o2)。forEach(
功能(键){
o1[键]=o2[键];
});
}
函数合并(a,b){
如果(a.长度!=b.长度){
抛出新错误();
}

对于(var ix=0;ix假设两个数组具有相同的长度,就地合并可以是这样的:

var c = [{ x: 0, y: 0, color: "green", value: 1, weight: 1 }, { x: 0, y: 1, color: "red", value: 3, weight: 1 }];
var a = [{ x: 0, y: 0, color: "green", value: undefined, weight: 1 }, { x: 0, y: 1, color:   "red", value: undefined, weight: 1 }];

var b = [{ x: 0, y: 0, value: 1, weight: 1 }, { x: 0, y: 1, value: 3, weight: 1 }];


function merge_objects(o1, o2) {
    Object.keys(o2).forEach(
        function(key) {
            o1[key] = o2[key];
        });
}

function merge(a, b) {
    if (a.length != b.length) {
        throw new Error();
    }
    for (var ix=0; ix<a.length; ix++) {
        merge_objects(a[ix], b[ix]);
    }
}
var a=[{x:0,y:0,颜色:“绿色”,值:未定义,权重:1},{x:0,y:1,颜色:“红色”,值:未定义,权重:1}];
var b=[{x:0,y:0,值:1,权重:1},{x:0,y:1,值:3,权重:1}];
函数合并对象(o1,o2){
对象。键(o2)。forEach(
功能(键){
o1[键]=o2[键];
});
}
函数合并(a,b){
如果(a.长度!=b.长度){
抛出新错误();
}

对于(var ix=0;ix假设两个数组具有相同的长度,就地合并可以是这样的:

var c = [{ x: 0, y: 0, color: "green", value: 1, weight: 1 }, { x: 0, y: 1, color: "red", value: 3, weight: 1 }];
var a = [{ x: 0, y: 0, color: "green", value: undefined, weight: 1 }, { x: 0, y: 1, color:   "red", value: undefined, weight: 1 }];

var b = [{ x: 0, y: 0, value: 1, weight: 1 }, { x: 0, y: 1, value: 3, weight: 1 }];


function merge_objects(o1, o2) {
    Object.keys(o2).forEach(
        function(key) {
            o1[key] = o2[key];
        });
}

function merge(a, b) {
    if (a.length != b.length) {
        throw new Error();
    }
    for (var ix=0; ix<a.length; ix++) {
        merge_objects(a[ix], b[ix]);
    }
}
var a=[{x:0,y:0,颜色:“绿色”,值:未定义,权重:1},{x:0,y:1,颜色:“红色”,值:未定义,权重:1}];
var b=[{x:0,y:0,值:1,权重:1},{x:0,y:1,值:3,权重:1}];
函数合并对象(o1,o2){
对象。键(o2)。forEach(
功能(键){
o1[键]=o2[键];
});
}
函数合并(a,b){
如果(a.长度!=b.长度){
抛出新错误();
}

对于(var ix=0;ix假设两个数组具有相同的长度,就地合并可以是这样的:

var c = [{ x: 0, y: 0, color: "green", value: 1, weight: 1 }, { x: 0, y: 1, color: "red", value: 3, weight: 1 }];
var a = [{ x: 0, y: 0, color: "green", value: undefined, weight: 1 }, { x: 0, y: 1, color:   "red", value: undefined, weight: 1 }];

var b = [{ x: 0, y: 0, value: 1, weight: 1 }, { x: 0, y: 1, value: 3, weight: 1 }];


function merge_objects(o1, o2) {
    Object.keys(o2).forEach(
        function(key) {
            o1[key] = o2[key];
        });
}

function merge(a, b) {
    if (a.length != b.length) {
        throw new Error();
    }
    for (var ix=0; ix<a.length; ix++) {
        merge_objects(a[ix], b[ix]);
    }
}
var a=[{x:0,y:0,颜色:“绿色”,值:未定义,权重:1},{x:0,y:1,颜色:“红色”,值:未定义,权重:1}];
var b=[{x:0,y:0,值:1,权重:1},{x:0,y:1,值:3,权重:1}];
函数合并对象(o1,o2){
对象。键(o2)。forEach(
功能(键){
o1[键]=o2[键];
});
}
函数合并(a,b){
如果(a.长度!=b.长度){
抛出新错误();
}

对于(var ix=0;ix进行编辑,以反映b可以更小,但决不能大于a

function merge(a,b){
    //Don't want to mutate a
    var result = a.slice();
    for(var i = 0; i < b.length; i++){
        for (var attrname in b[i]) {
             result[i][attrname] = b[i][attrname]; 
         }
    }
    return result;
}
函数合并(a、b){
//我不想让基因突变
var result=a.slice();
对于(变量i=0;i

代码部分取自:

中的已接受答案,经过编辑以反映b可以更小,但决不能大于a

function merge(a,b){
    //Don't want to mutate a
    var result = a.slice();
    for(var i = 0; i < b.length; i++){
        for (var attrname in b[i]) {
             result[i][attrname] = b[i][attrname]; 
         }
    }
    return result;
}
函数合并(a、b){
//我不想让基因突变
var result=a.slice();
对于(变量i=0;i

代码部分取自:

中的已接受答案,经过编辑以反映b可以更小,但决不能大于a

function merge(a,b){
    //Don't want to mutate a
    var result = a.slice();
    for(var i = 0; i < b.length; i++){
        for (var attrname in b[i]) {
             result[i][attrname] = b[i][attrname]; 
         }
    }
    return result;
}
函数合并(a、b){
//我不想让基因突变
var result=a.slice();
对于(变量i=0;i

代码部分取自:

中的已接受答案,经过编辑以反映b可以更小,但决不能大于a

function merge(a,b){
    //Don't want to mutate a
    var result = a.slice();
    for(var i = 0; i < b.length; i++){
        for (var attrname in b[i]) {
             result[i][attrname] = b[i][attrname]; 
         }
    }
    return result;
}
函数合并(a、b){
//我不想让基因突变
var-re