1

そこで、ここで尋ねた前の質問に取り組んでいます。この質問では、AngularJSを使用してJSONファイルから履歴タイムラインを作成する方法について説明しました。基本的に、JSONファイルには一連のHISTORY EVENTSオブジェクトが含まれ、各オブジェクトには、これらの一意のイベントが発生した日付を示す「theDate」というIDが含まれています。ビューの後半でCSSを使用してナビゲーションするために、すべてのイベントを特定の10年に並べ替えたいと思います。

構造が次のような多次元配列を作成するのに苦労しています(これはMASTER配列である必要があります)。

[[all of 1960s events],[all of 1970s events], [all of 1980s events]...]

... MASTER配列内のこれらの特定の配列のそれぞれには、その特定の10年間のイベントオブジェクトが含まれています。(たとえば、1960年代の配列の場合、イベントには年が含まれている必要があります[ 1961, 1963, 1969,etc.]

AngularJSを使用して、作業コードをここに示します。

        var events = $scope.events;

    function decadeSort(){

        var year;
        var arrayOfYears = [];


        for(var i = 0; i<events.length; i++){

            var date = new Date(events[i].theDate);
            year = date.getFullYear();

            var yearToString = year.toString();
            var yearToDecade = yearToString.substring(0,3).concat("0");
            arrayOfYears.push(yearToDecade);


        }
        console.log(arrayOfYears);
    };

    decadeSort();

配列は、次のarrayOfYearsように、それぞれのDECADEに従って、267個のイベントオブジェクトのすべてのYEARを出力します。

["1960","1960","1970","1970","1970","1980","1980","1990","1990","2000","2000"..]

その配列内のいくつかの文字列オブジェクトが繰り返されるので、どのオブジェクトが同じ文字列であるかに基づいて、その配列内に新しい配列を作成したいと思っていました。このループの書き方がわからないので、洞察と助けをいただければ幸いです。

どうもありがとう!

4

1 に答える 1

1

投稿したサンプルイベントを使用すると、以下は10年ごとにグループ化する簡単な方法です。

var grouped = {};

events.forEach(function (event) {
  var decade = Math.floor((new Date(event.theDate)).getFullYear() / 10) * 10;
  if (typeof grouped[decade] === 'undefined') {
    grouped[decade] = [];
  }

  grouped[decade].push(event);
});

console.log(grouped);

それをforEachサポートしていないブラウザをターゲットにしている場合は、変更が必要になる可能性のあるものを使用しています。

于 2013-01-22T16:02:08.373 に答える