Javascript 如何使用jQuery'将用户选项与默认选项合并;当选项具有对象的属性数组时,s extend()

Javascript 如何使用jQuery'将用户选项与默认选项合并;当选项具有对象的属性数组时,s extend(),javascript,jquery,Javascript,Jquery,当options对象具有一个值为对象数组的属性时,如何使用jQUery的extend()方法将用户选项与默认选项合并 例如: var settings4 = $.extend({ type: 'one-panel', // 'one-panel' | 'two-panel' sidebarTargets: [ { targetKey: 'sidebar-one', initialLoadPanelKey: '

当options对象具有一个值为对象数组的属性时,如何使用jQUery的
extend()
方法将用户选项与默认选项合并

例如:

    var settings4 = $.extend({
      type: 'one-panel', // 'one-panel' | 'two-panel'
      sidebarTargets: [
        {
          targetKey: 'sidebar-one',
          initialLoadPanelKey: 'panel1',
          emptyPanelMessage: '',
          sidebarWrapSelectorId: 'sidebar-container',
          sidebarPanelWrapTemplate: '<div class="sidebar-panel {panelInitialSlideCss}" id="{panelSelectorId}" data-panel-key="{panelKey}"></div>',
          showHeader: true,
          headerTemplate: '<div class="sidebar-header" id="sidebar-header">Header text</div>',
        },
        // if sidebarSettings.type == one-panel, this is not required
        {
          targetKey: 'sidebar-two',
          initialLoadPanelKey: 'none',
          emptyPanelMessage: '<span>No Notebooks Notes Found',
          sidebarWrapSelectorId: 'sidebar-container',
          sidebarPanelWrapTemplate: '<div class="sidebar-panel" id="{panelSelectorId}" data-panel-key="{panelKey}"></div>',
          showHeader: true,
          headerTemplate: '<div class="sidebar-header" id="sidebar-header">Header text</div>',
        },
        {
          targetKey: 'right-content-panel',
          selectorId: 'sidebar-container',
          cssClassLIst: 'content-panel content',
          showLoader: true, // when AJAX content is loaded, show a loader spinner
          loaderTemplate: '',
          initialInnerContent: '',
        },
        {
          targetKey: 'right-content-iframe-panel',
          selectorId: 'sidebar-container',
          cssClassLIst: 'content-panel content',
          iframeNameAttribute: 'content',
          template: '<iframe id="content-frame" src="default.html" name="content" width="100%" height="100%" frameborder="0"></iframe>',
        }  
      ],
    }, sidebarOptions);
var设置4=$.extend({
键入:“一个面板”/“一个面板”|“两个面板”
侧目标:[
{
targetKey:'侧边栏一',
initialLoadPanelKey:'panel1',
emptyPanelMessage:“”,
sidebarWrapSelectorId:“侧边栏容器”,
sidebarPanelWrapTemplate:“”,
showHeader:是的,
headerTemplate:“标题文本”,
},
//如果sidebarSettings.type==一个面板,则不需要这样做
{
targetKey:'侧边栏2',
initialLoadPanelKey:“无”,
emptyPanelMessage:“未找到笔记本笔记”,
sidebarWrapSelectorId:“侧边栏容器”,
sidebarPanelWrapTemplate:“”,
showHeader:是的,
headerTemplate:“标题文本”,
},
{
targetKey:“右内容面板”,
selectorId:'侧栏容器',
cssClassLIst:“内容面板内容”,
showLoader:true,//加载AJAX内容时,显示加载程序微调器
loaderTemplate:“”,
initialInnerContent:“”,
},
{
targetKey:“右内容iframe面板”,
selectorId:'侧栏容器',
cssClassLIst:“内容面板内容”,
iframeNameAttribute:'内容',
模板:“”,
}  
],
},侧压力选择);


sidebarTargets
上面的object属性就是问题所在。它可以包含数组中任意数量的对象。我如何使用jQuery的extend来合并选项和处理这样的属性?

恐怕您无法使用

extend
将能够扩展您拥有的对象,如果您发送。问题是对象中有
Array
s,而
extend
将不知道如何处理这些数组

如果您能够将代码更改为对象,这将非常有用:

var a={
a:[a'],
b:{
c:1
}
}
变量b={
a:[b'],
b:{
d:2
}
}
$.extend(a,b)
log('常规扩展:')
控制台日志(a);
console.log(“”)
变量a={
a:[a'],
b:{
c:1
}
}
变量b={
a:[b'],
b:{
d:2
}
}
$.extend(true,a,b)
console.log('deep copy extend:')
控制台日志(a)