2

我有一个包含 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
  }

在此处输入图像描述

4

2 回答 2

5

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

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方法。

于 2013-10-25T09:28:34.433 回答
5

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

var grouped = _.groupBy(yourObjects, 'title');
于 2013-10-25T09:43:58.503 回答