gpt4 book ai didi

javascript - 嵌套对象扩展并跳过未定义的属性(在 Angular 或 Underscore 中)

转载 作者:行者123 更新时间:2023-11-29 18:25:41 25 4
gpt4 key购买 nike

是否有关于如何处理以下extend 情况的实现(或模式)?据我所知,在 Angular 或 Underscore 中都没有办法直接做到这一点,对吗?

否则这是我的实现,但我想知道是否有任何已经完成的事情,或者无论如何,知道您对我的代码的反馈,谢谢!

http://jsbin.com/welcome/52916/edit

/**    
Extends the target object with the properties in the source object, with the following special handling:

- it doesn't extend undefined properties, i.e.
target: { a: 10 }
source: { a: undefined }
result: { a: 10 }

- it does nested extends rather than overwriting sub-objects, i.e.
target: { b: { i: 'Hi' } }
source: { b: { j: 'Bye' } }
result: { b: { i: 'Hi', j: 'Bye' } }

*/
function extend( target, source ) {
_.each( _.keys( source ), function( k ) {
if (angular.isDefined( source[k] )) {
if (angular.isObject( source[k] )) {
extend( definedOr( target[k], {} ), source[k] );
}
else {
target[k] = source[k];
}
}
});
return target;
}

最佳答案

是的,我想,_.extend_.defaults 都不能解决您的问题,而且我的 Angular-Fu 不够好,无法在那里发表评论。

但是,看起来 jQuery.extend(true, target, source) 确实解决了您的两个用例。方法调用中的 true 进行深度扩展,而 extend 方法已经适用于您提到的 undefined 情况。

如果您需要更多地控制解决源对象和目标对象之间的冲突,我总是发现 Object.merge(target, source, deep:boolean, resolve:boolean|function) 更灵活.如果您想知道这是来自名为 Sugar.js 的库的方法.

为了完整起见,可以针对您的特定用例使用 Sugar.js 方法,如下所示。

Object.merge(target, source, true, false);

希望这能回答您的问题。

关于javascript - 嵌套对象扩展并跳过未定义的属性(在 Angular 或 Underscore 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com