1

このような Web サービスから取得されたオブジェクトの配列があります。

{ 
  ArticleID: "ABC123", 
  Region: "US", 
  PubTypeID: "EO", 
  PubType: "Europe Order", 
  Created: "01/01/2013", 
  Scheduled: "03/02/2013"
} 

ArticleID、Region、および PubTypeID が複合キーを構成します。データソースは 1 つのテーブルであり、変更することはできませんが、ダッシュボードのようなインターフェイスを表示するには、一意のアイテムを取得する必要があります。したがって、一意の ArticleID を表示しますが、その下に記事をグループ化します。インターフェイスは次のようになります。

ArticleID      Status
----------------------
ABC123          Scheduled
    Region:US       Scheduled: 02/02/2013
    Region:JP       Scheduled: 05/02/2013
    Region:OE       Scheduled: 03/02/2013
    Region:EU       Scheduled: 04/02/2013
ABC456          Ready to Schedule          
    Region:US       
    Region:US       
    Region:US       
ABC789          Sent
    Region:EU       Sent On: 01/02/2013
    Region:EU       Sent On: 01/02/2013
    Region:EU       Sent On: 01/02/2013
    Region:EU       Sent On: 01/02/2013

ステータスは日付によって決まります。また、記事の下の 1 つのアイテムに日付があり、1 つのアイテムに日付がない場合、ステータスはどうなるかというジレンマがあります。ステータスはどうなりますか?

データが正規化されている場合、複数の選択を行って出力を作成できるため、ここでは問題はありませんが、フラットな結果セットしかないため、Javascript で「選択」を行う必要があります。

誰かがJavascriptでこれを行う方法を教えてもらえますか?

4

3 に答える 3

0

すべての記事IDを知っているという事実を前提として、を使用してすべてのエントリを並べ替えることができますArray.prototype.filter(そうでない場合は、入力を繰り返して収集する必要があります)。

var input = [{ 
  ArticleID: "ABC123", 
  Region: "US"
},{ 
  ArticleID: "ABC456", 
  Region: "US"
}];

var regions = ["ABC123","ABC456"];

var articles = [];
regions.forEach(
    function(reg,i){
        articles[i] = input.filter( function(el){ return el.ArticleID == reg} );
    }
);

console.log(regions);
//regions[0] <= array with all articles with regionID "ABC123"
//regions[1] <=                   - " -               "ABC456"

これarticlesで、ArticleIDでソートされたすべての記事の配列が保持されます。

注意してください。これはIE9+コードです。これをIE8以下で機能させるには、シムが必要です。これは、対応するMDN-ArticlesにありますfilterforEach

于 2013-01-21T15:42:43.430 に答える
0

ArticleID順のデータを並べ替える必要があると思います。そして、あなたが多くの記事を持っていると仮定します。この反復のようなものは、再配置タスクを実行できます。次に、有用な情報を出力する新しいオブジェクトを簡単に繰り返すことができます

var x
var y = 0;
var newArray = new Array();
for(key in data){
   x = data[key].articleID; //The value of the key you want to use (ArticleID)
   newArray[x] = newArray[x] || []
   newArray[x][y] = data[key];
   y++
}
console.log(newArray)

ここにフィドルがあります。(chrome または他のコンソールを使用して) 結果のオブジェクトを調べると、データが ArticleID によってどのようにグループ化されているかがわかります。

編集: コードをよりクリーンなバージョンに置き換えました。

于 2013-01-21T16:13:59.270 に答える
0

あなたが説明したように、このデータを作成してテーブルに入れるために、最初にデータを整理して、あなたがやりたいことと一致するようにします。したがって、個々のオブジェクトを持つ代わりに、返されたデータを反復処理して次のように変換します。

{ArticleID: "ABC123", 
Status: "Scheduled", 
Articles: { 
  ArticleID: "ABC123", 
  Region: US, 
  PubTypeID: "EO", 
  PubType: "Europe Order", 
  Created: "01/01/2013", 
  Scheduled: "03/02/2013"
  },{ 
  ArticleID: "ABC234", 
  Region: US, 
  PubTypeID: "EO", 
  PubType: "Europe Order", 
  Created: "01/01/2013", 
  Scheduled: "03/02/2013"
  }
}

次に、この構造に基づいてテーブルを作成します。ステータスを判断するには、関数でいくつかの計算を行う必要があります。特定の回答を提供するのに十分なほどこれを理解していませんが、すべての一般的な記事 ID が同じステータスを持っているように見えるため、オブジェクトの再構築中にこれを無視し、テーブルの構築中に挿入することができます。

サーバー側のコードを制御できる場合は、オブジェクトをクライアントに渡す前に、このオブジェクトの再構築作業を行う方がはるかに優れています。

于 2013-01-21T15:38:56.017 に答える