2015-02-21 4 views
0

Друзья,Заказать объекты в коллекции JavaScript

У меня есть следующая проблема. У меня есть коллекция объектов, возвращаемых с контроллера ASP.NET MVC как JSON. В представлении я хочу заказать эти объекты в определенном порядке на основе свойства имени.

Я попытался сделать это, создав отдельный массив JS. Основываясь на свойстве names, я вставляю объект в определенный индекс в массиве.

Я уверен, что есть лучший способ решить эту проблему. Также в настоящее время я получаю только последнее условие для «событий», вставленных в каждую позицию индекса. Ниже приведен мой код.

Спасибо большое!

<script id="tmpl-refinement-results" type="text/template"> 
    <% var sortedFacets = [] %> 
    <%_.each(SearchAggregationDetails, function(aggValue, y){ 

     if(aggValue.FilterText = "News"){ 
      sortedFacets[0] = aggValue; 
     } 

     if(aggValue.FilterText = "Articles"){ 
      sortedFacets[1] = aggValue; 
     } 

     if(aggValue.FilterText = "Case Studies"){ 
      sortedFacets[2] = aggValue; 
     } 

     if(aggValue.FilterText = "Nice Exhibit Case Studies"){ 
      sortedFacets[3] = aggValue; 
     } 

    if(aggValue.FilterText = "Events"){ 
     sortedFacets[4] = aggValue; 
    } 

}) %> 

<% _.each(sortedFacets, function(aggregation, i) { %> 
<li> 
    <a href="<%=aggregation.TypeUrl %>"><%=aggregation.FilterText %> <span class="refinement-results-list num-val"> <%=aggregation.DocCount %></span></a> 
</li> 
<% }); %> 

+0

Вы можете отсортировать массив с помощью определенного имущества в объекте –

ответ

1

Не знаете, как ваш JSON exaclty выглядит. Но _.pluck() от UnderscoreJS должен работать на вас.

См. Демонстрационную версию ниже и здесь, по адресу jsFiddle.

var obj = { 
 
    post1 : { 
 
     category: "News" 
 
    }, 
 
    post2 : { 
 
     category: "Articles" 
 
    }, 
 
    post3 : { 
 
     category: "Case Studies" 
 
    }, 
 
    post4: { 
 
     category: "Nice Exhibit Case Studies" 
 
    }, 
 
    post5: { 
 
     category: "Events" 
 
    } 
 
}; 
 

 
console.log(_.pluck(obj, 'category'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.1/underscore-min.js"></script>

1

Я хотел бы использовать отдельный объект, чтобы определить порядок и _.sortBy что-то вроде этого. Например:

// Map the strings to something that is easy to sort. 
var theRightOrder = { 
    'News': 0, 
    'Articles': 1, 
    'Case Studies': 2, 
    'Nice Exhibit Case Studies': 3, 
    'Events': 4 
}; 

var sorted = _(SearchAggregationDetails).sortBy(function(o) { 
    return theRightOrder[o.FilterText]; 
}); 

Я предполагаю, что SearchAggregationDetails является массивом объектов.

Демо: https://jsfiddle.net/ambiguous/x5q153gp/

+0

Спасибо большое! Это то, что я искал. Очень полезно. –

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