2015-05-11 2 views
-2

Я хочу сделать яваскрипта динамическое меню, и у меня несколько проблем с того, я получаю JSON данные и с JavaScript Я хочу, чтобы настроить меню и подменю ...Сортировка объектов JavaScript в массиве

проблема заключается в том

listMenu[ 
    { 
    id:10, 
    name: 'financial', 
    submenu: 0, 
    icon: 'fa-bar-chart' 
    }, 
    { 
    id:11, 
    name: 'bill', 
    submenu: 10, 
    icon: 'fa-bar-chart' 
    }, 
    { 
    id:12, 
    name: 'Pay', 
    submenu: 10, 
    icon: 'fa-bar-chart' 
    }, 
    { 
    id:13, 
    name: 'Contact', 
    submenu: 2, 
    icon: 'fa-bar-chart' 
    } 
] 

Что мне нужно сделать, это отношение имеет submenu с id это будет что-то вроде этого:

  • Financial (подменю 0)

  • Билл (подменю 10)

  • Pay (подменю 10)

  • Контакт

+0

Правильно составите свой вопрос, используя код с использованием синтаксиса кода (четыре пробела перед каждой строкой). Если кто-то еще должен отредактировать ваш вопрос, чтобы сделать это для вас, вы [не выполнили свою сторону сделки] (https://stackoverflow.com/help/how-to-ask) («проверять подлинность перед проводка "). Вы также упоминаете, что хотите «что-то вроде»: насколько это нравится? Точно так же? Если нет, то это не очень хороший пример, и вам, вероятно, нужно написать точную структуру HTML или объектов, в которой вы хотели бы закончить. И, наконец: ** что вы пробовали **? (если ничего, попробуйте сначала. В противном случае, почтовый индекс) –

+1

Почему «Контакт» имеет «подменю: 2», если это меню верхнего уровня? – Paulpro

+0

он имеет подменю id dosnt означает его верхнее меню, что мне нужно сделать, это проверить в этом массиве, что такое верхнее меню, а что нет, например, счет и оплата - это подменю из финансового, тогда я добавлю счет и оплачу по тогда я добавлю контакт под всем другим верхним меню, но если у другого человека больше доступа к другому меню, например, в контакте, я также могу иметь подменю «email» с подменю: 13 (отношения с контактом) или, возможно, другое верхнее меню на контакте, что делает его подменю. – user1748153

ответ

0

Если вы хотите, чтобы отсортировать массив с помощью какой-то собственной логики, используйте Array.prototype.sort

В вашем случае это будет выглядеть так:

var listMenu = [ 
    {id:10, name: 'financial', submenu: 0, icon: 'fa-bar-chart'}, 
    {id:11, name: 'bill', submenu: 10, icon: 'fa-bar-chart'}, 
    {id:12, name: 'Pay', submenu: 10, icon: 'fa-bar-chart'}, 
    {id:13, name: 'Contact', submenu: 2, icon: 'fa-bar-chart'} 
] 

var sortedList = listMenu.sort(function(a, b){ 
    if(a.submenu > b.submenu){ 
     return 1 
    } else if (b.submenu > a.submenu){ 
     return -1 
    } else { 
     return 0 
    } 
}) 
+0

Поскольку свойство '.submenu' - это число, вы можете упростить тело функции обратного вызова сортировки для возврата a.submenu - b.submenu;'. Ряд сравнений там теперь понадобится только для строк (так как вы не можете их вычесть). –

+0

@MichaelGeary Хотя это верно для самой маленькой базы кода, OP казался неопытным программированием, поэтому я старался не путать их. – JoshWillik

Смежные вопросы