如何使用javascript按组排序数组?

时间:2013-10-25 09:23:21

标签: javascript jquery arrays sorting group-by

我有一个包含12个条目的数组。我喜欢用标题对它们进行排序。许多文章都有相同的标题,我可以很容易,因为标题是相同的。 我最后可能是3或4组。

我有非常小的javascript代码,因为我不知道我是否想用循环或其他方式来做。

的Javascript

 var totalGroups = [];
        var actualGroup = [];

var contentarticles = articles.contentarticles,
                article,
                $out = $("#articlesOutput");


                for (var i = 0; i < contentarticles.length; i++) {
                    if (!article || article.title != contentarticles[i].title) {
                        article = contentarticles[i];

                        document.getElementById('articleForNaviTopTitle').innerHTML = article.title;
                        document.getElementById('articleForNaviTopID').innerHTML = article.id;

                        var articlesOutput = [
                            '<li><a href="./certifiedTraining/id=', article.id, '/step=', i + 1, '">',
                            article.title,
                            '</li>'
                        ].join("");
                        $out.append(articlesOutput);
                    }
                }
// till this point all works fine, and a code above gives results in the image below.

//**Im struggeling right there, how to sort this array by groups?????**

while (article.title(this) == article.title(next))
  {
  code block to be executed
  }

enter image description here

2 个答案:

答案 0 :(得分:5)

如果我理解正确你想要的是挑选每个对象并按标题分组。如果我是你,我会看看UnderScore js。它是js的一个很好的实用程序集合。

var grouped = _.groupBy(yourObjects, 'title');

答案 1 :(得分:3)

不确定我是否理解“按组排序数组”的含义。假设您想按标题对数组进行排序;那么你会有类似的东西:

contentarticles.sort(function(a, b) {
    if (a.title > b.title) return 1;
    if (a.title < b.title) return -1;
    return 0;
 });

但如果这不是你想要的结果,你会更明确吗?你想要做什么,过滤掉重复的东西?创建“数组数组”?或者是什么?

如果您想分组而不是排序:

var articles = contentarticles.reduce(function(articles, article) {
    (articles[article.title] || (articles[article.title] = [])).push(article);
    return articles;
}, {});

通过这种方式,您将拥有一个对象,其中属性是自己的标题,每个属性将包含一个包含完整文章对象的数组。所以,一旦你有了标题,你就可以获得所有具有相同标题的文章。如果您想要所有标题的列表,可以使用Object.keys;如果你想迭代你可以使用for…in

这是我使用的reduce方法。