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

r.r*_*r.r 1 javascript arrays sorting jquery 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
  }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ZER*_*ER0 5

不确定我是否理解“按组排序数组”的意思。假设您想按标题对数组进行排序;然后你会得到类似的东西:

\n\n
contentarticles.sort(function(a, b) {\n    if (a.title > b.title) return 1;\n    if (a.title < b.title) return -1;\n    return 0;\n });\n
Run Code Online (Sandbox Code Playgroud)\n\n

但如果这不是你想要的结果,你能说得更明确一些吗?您到底想做什么来过滤掉重复项?创建“数组的数组”?或者是什么?

\n\n

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

\n\n
var articles = contentarticles.reduce(function(articles, article) {\n    (articles[article.title] || (articles[article.title] = [])).push(article);\n    return articles;\n}, {});\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

这里是我使用的reduce方法。

\n


小智 5

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

var grouped = _.groupBy(yourObjects, 'title');
Run Code Online (Sandbox Code Playgroud)