JavaScript使用数组深度扩展对象

时间:2014-12-17 19:46:10

标签: javascript arrays angularjs

以此angular recursive extend topic为基础。

我稍微修改了版本......

var extendDeep = function(dst) {
    angular.forEach(arguments, function(obj) {
        if (obj !== dst) {
            angular.forEach(obj, function(value, key) {
                if (dst[key] && angular.isObject(dst[key])) {
                    extendDeep(dst[key], value);
                } else if(!angular.isFunction(dst[key])) {
                    dst[key] = value;
                }
            });
        }
    });
    return dst;
};

但发现它没有正确考虑数组。例如,如果我有一个像这样的对象:

var obj = { zoo: [ 'moose', 'panda' ] };

然后我打电话给:

 deepExtend(obj, {
     zoo: [ 'panda' ]
 })
乍一看,你会期望它删除对象,但实际上它最终会像:

{  zoo: [ 'panda', 'panda' ] }

现在。预期的输出看起来像:

{  zoo: [ 'panda' ] }

当然,这是一个非常简单的案例。

我并不像大多数解决方案那样寻找'独特'或'合并'。我需要添加左侧缺少的项目,删除左侧但不是右侧的项目,然后递归迭代并将这些对象扩展到位。

有很多不同的方法可以解决这个问题,寻找有关良好方法的反馈。

0 个答案:

没有答案