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