如何在JavaScript中将另一个具有相同定义的对象的值添加到对象属性中
如何在JavaScript中将另一个具有相同定义的对象的值添加到对象属性中
我有一个与下面类似的对象:
var obj1 = { fparams: { keys: ['a', 'b'], pairs: { 'p': 'qwert' } }, qparams: { 'x': 'xyz' } }
还有另一个对象:
var obj2 = { fparams: { keys: ['c', 'd'], pairs: { 'q': 'yuiop' } }, qparams: { 'z': 'zyx' } }
我该如何将obj2
的属性添加到obj1
中?
由于我在使用Angular,我尝试使用angular.merge(obj1,obj2)
,但它没有合并keys数组,而是用obj2
中的keys值覆盖它,其余属性都被合并了。
最终我想要的是:
var obj2 = { fparams: { keys: ['a', 'b', 'c', 'd'], pairs: { 'p': 'qwert', 'q': 'yuiop' } }, qparams: { 'x': 'xyz', 'y': 'zyx' } }
我使用的Angular版本是1.5.8
编辑: 最终我使用了lodash,因为它更容易使用,而且有很多我之前不知道的功能。
在JavaScript中,有时我们可能需要将一个对象的属性值添加到另一个具有相同定义的对象中。下面将介绍该问题的原因以及解决方法。
首先,有一个Lodash库,它提供了一个称为merge的方法,可以很方便地将一个对象的属性值添加到另一个具有相同定义的对象中。如果你考虑使用Lodash,可以使用该库的merge方法来解决此问题。
但是,如果你不想使用Lodash,还有其他方法可以解决这个问题。下面将介绍一种基本的解决方案,即使用JavaScript的原生语法来实现。
假设我们有两个对象,obj1和obj2,它们具有相同的属性定义。我们想要将obj1的属性值添加到obj2中。
首先,我们可以使用遍历来访问obj1的每个属性。然后,我们可以使用JavaScript的赋值操作符将obj1的属性值赋给obj2。
下面是一个示例代码:
// 定义两个具有相同属性定义的对象 let obj1 = { name: 'John', age: 30 }; let obj2 = { name: 'Jane', age: 25 }; // 使用遍历和赋值操作符将obj1的属性值添加到obj2中 for (let key in obj1) { obj2[key] = obj1[key]; } // 输出结果 console.log(obj2);
运行上述代码,将会输出以下结果:
{ name: 'John', age: 30 }
通过以上代码,我们成功将obj1的属性值添加到了obj2中。
这就是我们如何在JavaScript中将一个对象的属性值添加到另一个具有相同定义的对象中的解决方法。无论你选择使用Lodash还是原生JavaScript,都可以根据自己的需求来解决这个问题。
在JavaScript中,如何将一个对象的属性值添加到另一个具有相同定义的对象中的问题是出于需要将两个对象的属性进行合并的需求。根据给出的代码,我们可以看到问题的解决方法。
首先,使用lodash库的mergeWith
函数可以实现合并操作。当属性值是数组时,需要使用concat函数进行合并。
另外,还给出了一个使用递归的深度合并的尝试。这个方法通过递归地遍历两个对象的属性,并根据属性是否相同以及是否为对象或数组来进行合并操作。
最后,还某些情况下了使用angular.merge函数来合并对象的方法。
通过使用lodash库的mergeWith函数或者自己实现递归合并的方法,我们可以解决将一个对象的属性值添加到另一个具有相同定义的对象中的问题。
这个问题的原因是要将一个对象的属性值与另一个具有相同定义的对象的属性值相加。解决方法是使用纯JavaScript和递归函数mergeObjects。下面是解决方法的代码:
function mergeObjects(o1,o2){ return Object.keys(o1) .reduce(function(r,k){ o1[k] = Array.isArray(o1[k]) ? o1[k].concat(o2[k]) : typeof o1[k] === "object" ? mergeObjects(o1[k],o2[k]) : (r = Object.assign({},o1,o2),o1[k]); return r; }, o1); } var objs = [{ fparams: { keys : ['a', 'b'], pairs: { 'p': 'qwert' } }, qparams: { 'x': 'xyz' } }, { fparams: { keys : ['c', 'd'], pairs: { 'q': 'yuiop' } }, qparams: { 'z': 'zyx' } }], result = objs.reduce(mergeObjects); console.log(JSON.stringify(result,null,2));
感谢回答,但为什么在'pairs'下又形成了额外的对象'p',而在'qparams'下又形成了'x'?
Sinha:是的,完全是我的疏忽。我已经更正了`: Object.assign({},o1,o2);`这行代码,改为显示`: (r = Object.assign({},o1,o2),o1[k]);`。感谢您的提醒。