В subels пункты li накапливаются с каждой итерацией и не отчищаются при объявлении, а если очищать с помощью subels.empty(), то они в итоге все удаляются
console.log(result);
$('.menu').empty();
for (item of result) {
// console.log(item);
if (item['sub'] == 1) {
//С сабменю
var subels = $(`<ul></ul>`);
var el = $(`<li><a>${item['name']}</a></li>`);
for (var sub of item['subs']) {
subels.append(`<li><a href="${sub.href}">${sub.subname}</a></li>`);
}
el.append(subels);
$('.menu').append(el);
} else if (item['sub'] == 0) {
//Без сабменю
var el = $(`<li><a href="${item['href']}">${item['name']}</a></li>`);
$('.menu').append(el);
}
}
Делайте empty в начале итерации
Продвижение своими сайтами как стратегия роста и независимости