【发布时间】:2014-08-15 15:27:25
【问题描述】:
我想创建一个函数,从该对象创建一个具有递归的对象。
例如:
var arr1 = {
'house' : {
'doors' : 'black',
'windows' : 'white',
},
'car' : 'audi'
};
var arr2 = {
'house' : {
'doors' : 'yellow',
'windows' : 'red',
},
'car' : 'bmw',
'wife' : 'hot'
};
and as result I want to get:
arr3 = {
'house' : {
'doors' : 'black yellow',
'windows' : 'white red',
},
'car' : 'audi bmw',
'wife' : 'hot'
};
我有一个组合两个对象的函数,但如果某些值是对象,我该怎么做?
function mergeOptions(obj1,obj2){
var obj3 = {};
for(var attrname in obj1)
{
obj3[attrname] = obj1[attrname];
}
for(var attrname in obj2)
{
if ( obj3[attrname] != 'undefined')
obj3[attrname] += ' ' + obj2[attrname];
else
obj3[attrname] = obj2[attrname];
alert( obj1[attrname]);
}
return obj3;
}
在这个函数中也是一个但是它在第二个循环中添加未定义到现有字符串。不知道为什么。
任何想法如何创建这样的功能?
【问题讨论】:
-
if (typeof foo === 'object') { /* do recursive call */ }另见stackoverflow.com/questions/11922383/… 和stackoverflow.com/q/13861312/218196 -
我已经检查了那个线程,没有递归的迹象。
-
而不是合并到:
'house' : { 'doors' : 'black yellow', 'windows' : 'white red', }'您可以考虑使用数组而不是字符串:'house' : { 'doors' : ['black', 'yellow'], 'windows' :['white', 'red'], } -
@Cirvis,Jeremy 线程的第二个答案是关于
jQuery.extend,它有一个递归选项。你可以这样使用obj3 = $.extend(true, {}, obj1, obj2)
标签: javascript jquery