【问题标题】:Order objects in a JavaScript collection在 JavaScript 集合中排序对象
【发布时间】:2015-04-23 11:36:26
【问题描述】:

朋友们,

我有以下问题。我有一组从 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>
<% }); %>

【问题讨论】:

  • 您可以按对象中的某个属性对数组进行排序

标签: javascript arrays asp.net-mvc coffeescript underscore.js


【解决方案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/

【讨论】:

  • 非常感谢!这就是我一直在寻找的。很有帮助。
【解决方案2】:

不确定您的 JSON 精确度如何。但是来自 UnderscoreJS 的 _.pluck() 应该适合你。

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'));
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.1/underscore-min.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    相关资源
    最近更新 更多