У меня есть этот код яваскрипта, используя jQuery.extend:Почему этот рекурсивный вызов jQuery.extend не работает?
hash1 = {"/":{"programme-nav":true}};
hash2 = {"/":{"what-is-scheme":true}};
merged = $.extend(hash1, hash2);
deep_merged = $.extend(true, hash1, hash2);
//expected_deep_merged = {"/":{"programme-nav":true, "what-is-scheme":true}};
console.log("merged = "+JSON.stringify(merged));
// gives {"/":{"what-is-scheme":true}};
console.log("deep_merged = "+JSON.stringify(deep_merged));
// also gives {"/":{"what-is-scheme":true}};
Согласно API (https://api.jquery.com/jquery.extend/), передавая true
в качестве первого аргумента будет рекурсивно объединить объекты. В этом случае я ожидаю получить результат в комментарии. Но, я получаю то же самое, что и в случае, если я делаю не глубокие расширения.
Я установил jsfiddle для этого здесь, который выводит на консоль https://jsfiddle.net/0725apqn/2/, чтобы вы могли играть.
Может кто-нибудь объяснить, где я иду не так? спасибо, Макс
EDIT: Я идиот. Передача true, поскольку первый аргумент делает глубокое слияние правильно, но я не заметил, что я уже перезаписал hash1 в первой части моего примера (где я делаю не глубокое слияние), так что когда я пришел к «глубокому» слиянию, я фактически делал это:
deep_merged = $.extend(true, {"/":{"what-is-scheme":true}}, {"/":{"what-is-scheme":true}});
Массивный «дох». спасибо всем, кто читал это. Я собираюсь присудить как можно больше очков, а затем удалить этот вопрос.
Я даю вам +1 для редактирования :) –