Javascript合并两个对象
我正在寻找一个javascript函数,比如PHP array\u merge\u recursive。 据我所知,javascript中没有这样的东西,我想知道如何实现类似的东西 问题是: 我有两个目标: 在这些对象中,我需要创建一个新对象,如下所示:Javascript合并两个对象,javascript,object,merge,Javascript,Object,Merge,我正在寻找一个javascript函数,比如PHP array\u merge\u recursive。 据我所知,javascript中没有这样的东西,我想知道如何实现类似的东西 问题是: 我有两个目标: 在这些对象中,我需要创建一个新对象,如下所示: var obj3 = { "AUDCAD": { "t": [1439238600, 1439238600, 111], //Note that the value "111" is added from o
var obj3 = {
"AUDCAD": {
"t": [1439238600, 1439238600, 111], //Note that the value "111" is added from obj2 to the end of obj1.
"o": [0.9646, 0.9646, 111],
"h": [0.9646, 0.9646, 111],
"l": [0.9645, 0.9645, 111],
"c": [0.9645, 0.9645, 111],
"v": [15, 15, 111]
},
"AUDCHF": {
"t": [1439238600, 1439238600, 111],
"o": [0.7291, 0.7291, 111],
"h": [0.7292, 0.7292, 111],
"l": [0.729, 0.729, 111],
"c": [0.7291, 0.7291, 111],
"v": [6, 6, 111]
}
}
我在做什么:
数据将附加到obj1
数据将附加到obj1此函数假定对象x中的所有关键帧和子关键帧都在对象y中,反之亦然
function merge(x, y) {
var result = {};
Object.keys(x).forEach(
function (k) {
result[k] = {};
Object.keys(x[k]).forEach(
function (j) {
if (j in y[k]) {
result[k][j] = x[k][j].concat(y[k][j]);
}
});
});
return result;
}
试运行:
merge(obj1, obj2);
=> { AUDCAD:
{ t: [ 1439238600, 1439238600, 111 ],
o: [ 0.9646, 0.9646, 111 ],
h: [ 0.9646, 0.9646, 111 ],
l: [ 0.9645, 0.9645, 111 ],
c: [ 0.9645, 0.9645, 111 ],
v: [ 15, 15, 111 ] },
AUDCHF:
{ t: [ 1439238600, 1439238600, 111 ],
o: [ 0.7291, 0.7291, 111 ],
h: [ 0.7292, 0.7292, 111 ],
l: [ 0.729, 0.729, 111 ],
c: [ 0.7291, 0.7291, 111 ],
v: [ 6, 6, 111 ] } }
此函数假定对象x中的所有关键帧和子关键帧都位于对象y中,反之亦然
function merge(x, y) {
var result = {};
Object.keys(x).forEach(
function (k) {
result[k] = {};
Object.keys(x[k]).forEach(
function (j) {
if (j in y[k]) {
result[k][j] = x[k][j].concat(y[k][j]);
}
});
});
return result;
}
试运行:
merge(obj1, obj2);
=> { AUDCAD:
{ t: [ 1439238600, 1439238600, 111 ],
o: [ 0.9646, 0.9646, 111 ],
h: [ 0.9646, 0.9646, 111 ],
l: [ 0.9645, 0.9645, 111 ],
c: [ 0.9645, 0.9645, 111 ],
v: [ 15, 15, 111 ] },
AUDCHF:
{ t: [ 1439238600, 1439238600, 111 ],
o: [ 0.7291, 0.7291, 111 ],
h: [ 0.7292, 0.7292, 111 ],
l: [ 0.729, 0.729, 111 ],
c: [ 0.7291, 0.7291, 111 ],
v: [ 6, 6, 111 ] } }
我向你推荐lodash你能更好地定义你想要的行为吗?什么类型应该合并、覆盖、添加到列表中等等?@pzp简单地说,我需要在obj1的末尾附加obj2的值,保留键和值,因此结果应该类似于obj3示例代码。我向您推荐lodash您能更好地定义所需的行为吗?什么类型应该合并、覆盖、添加到列表等?@pzp简单地说,我需要在obj1的末尾附加obj2的值,保留键和两者的值,因此,结果应该类似于obj3示例代码。扩展对象原型不是imo的方法。从数组到字符串再到布尔值,任何东西都可以使用该方法。我的观点是,您可以这样做。您可以定义特定对象,并在其中包含合并方法。对于没有合并的对象,将直接忽略。扩展对象原型不是imo的方法。从数组到字符串再到布尔值,所有东西都可以使用该方法。我的观点是,您可以这样做。您可以定义特定对象,并在其中包含合并方法。对于没有合并的对象,合并将直接忽略。
obj1.merge(obj2);
function merge(x, y) {
var result = {};
Object.keys(x).forEach(
function (k) {
result[k] = {};
Object.keys(x[k]).forEach(
function (j) {
if (j in y[k]) {
result[k][j] = x[k][j].concat(y[k][j]);
}
});
});
return result;
}
merge(obj1, obj2);
=> { AUDCAD:
{ t: [ 1439238600, 1439238600, 111 ],
o: [ 0.9646, 0.9646, 111 ],
h: [ 0.9646, 0.9646, 111 ],
l: [ 0.9645, 0.9645, 111 ],
c: [ 0.9645, 0.9645, 111 ],
v: [ 15, 15, 111 ] },
AUDCHF:
{ t: [ 1439238600, 1439238600, 111 ],
o: [ 0.7291, 0.7291, 111 ],
h: [ 0.7292, 0.7292, 111 ],
l: [ 0.729, 0.729, 111 ],
c: [ 0.7291, 0.7291, 111 ],
v: [ 6, 6, 111 ] } }