Вопрос по javascript, jquery – Есть ли правильный способ для $ .extend вложенных свойств в jQuery?

10

Что у меня есть и что мне нужно. Это легко.

Параметры по умолчанию (есть вложенные свойства):

{
  sDom: 'frt<"tfoot"lp>',
  bInfo: false,
  sPaginationType: "full_numbers",
  oLanguage: {
    sSearch: "",
    sLengthMenu: "Show _MENU_",
    oPaginate: {
      sFirst:     "|<<",
      sLast:      ">>|",
      sNext:      ">>",
      sPrevious:  "<<"
    }
  }
}

Актуальные варианты:

{
  oLanguage: {
    oPaginate: {
      sNext:      "MODIFIED"
    }
  }
}

Результат $ .extend:

{
  sDom: 'frt<"tfoot"lp>',
  bInfo: false,
  sPaginationType: "full_numbers",
  oLanguage: {
    oPaginate: {
      sNext:      "MODIFIED"
    }
  }
}

Что мне нужно, это правильно расширить параметры по умолчанию фактическими параметрами и получить следующий результат (одно свойство было изменено):

{
  sDom: 'frt<"tfoot"lp>',
  bInfo: false,
  sPaginationType: "full_numbers",
  oLanguage: {
    sSearch: "",
    sLengthMenu: "Show _MENU_",
    oPaginate: {
      sFirst:     "|<<",
      sLast:      ">>|",
      sNext:      "MODIFIED"
      sPrevious:  "<<"
    }
  }
}

Проблема в том, что функция $ .extend игнорирует вложенные свойства и оперирует только свойствами первого уровня. Теперь я вручную $ .extend каждого из вложенных свойств, но я думаю, что это не решение.

Ваш Ответ

1   ответ
40

Тебе нужнорекурсивная копия мимоходомtrue в качестве первого параметра:

var defaults = {...}
var actual = {...}

//recursively merge to a blank object
console.log($.extend(true,{}, defaults, actual))​

Похожие вопросы