超难度问题,实现$merge方法。

cn00439802 2009-12-17 03:31:48
mootools中有$merge方法能实现以下效果:

var obj1 = {a: 0, b: 1};
var obj2 = {c: 2, d: 3};
var obj3 = {a: 4, d: 5};
var merged = $merge(obj1, obj2, obj3); //returns {a: 4, b: 1, c: 2, d: 5}, (obj1, obj2, and obj3 are unaltered)

var nestedObj1 = {a: {b: 1, c: 1}};
var nestedObj2 = {a: {b: 2}};
var nested = $merge(nestedObj1, nestedObj2); //returns: {a: {b: 2, c: 1}}


简单来说就是把几个对象的属性合并起来,难点就在于对象里面的属性是不确定的,可能无限嵌套。
...全文
74 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengsky491 2009-12-17
  • 打赏
  • 举报
回复
arguments[0] = eavl('{' + tmp.join(',') + '}');

return arguments[0];

改成:

eval('var t =' + '{' + tmp.join(',') + '}');
return t;
fengsky491 2009-12-17
  • 打赏
  • 举报
回复
没用过mootools,jquery也正在看,

function merge(){
var target = [];

if(!arguments[0]){
return null;
}
for(var i = 0;i < arguments.length;i++){
for(var p in arguments[i]){
target[p] = arguments[i][p];
}
}

var tmp = [];

for(var p in target){
tmp.push(p + ':' + target[p]);
}

arguments[0] = eavl('{' + tmp.join(',') + '}');

return arguments[0];
}

fengsky491 2009-12-17
  • 打赏
  • 举报
回复
好像就是js的hash
xmliy 2009-12-17
  • 打赏
  • 举报
回复
不用框架,但可以把框架中的代码拷出来用


function $merge()
{
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
if ( typeof target === "boolean" )
{
deep = target;
target = arguments[1] || {};
i = 2;
}
if ( typeof target !== "object" && target.toString() != "[object Function]" ) target = {};
if ( length == i )
{
target = this;
--i;
}
for ( ; i < length; i++ )
{
if ( (options = arguments[ i ]) != null )
{
for ( var name in options )
{
var src = target[ name ], copy = options[ name ];
if ( target === copy ) continue;
if ( deep && copy && typeof copy === "object" && !copy.nodeType )
target[ name ] = $merge( deep, src || ( copy.length != null ? [ ] : { } ), copy );
else if ( copy !== undefined )
target[ name ] = copy;
}
}
}
return target;
};

var obj = $merge(true, obj1, obj2, obj3, ......);
cn00439802 2009-12-17
  • 打赏
  • 举报
回复
如果能用框架,我还发出来干嘛。。。
xmliy 2009-12-17
  • 打赏
  • 举报
回复
使用jQuery,

var obj = $.extend(true, obj1, obj2, obj3,......);
cn00439802 2009-12-17
  • 打赏
  • 举报
回复
偶滴神啊,钻石五角星们,都歇息了萨?自己顶自己下!!!!!!
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2009-12-17 03:31
社区公告
暂无公告