2016-05-06 11 views
1

私は非常に複雑な計算を手近に行っています。ここにあります。私にはテーブルがあります。オブジェクトの配列 - 他の列のデータと比較して列を増やす

表1:(名前、ID、場所和テーブルの列である)

Name | table1_ID | Location | Sum 
rick | 1  | Gorets | 
alex | 3  | hebrew | 

表2:(市、ID、性別、テーブルの列である)

City | table2_ID | Sex 
wew | 34  | M 
rfgf | 3   | F 
dgff | 1   | M 
hgfhg| 1 | F 

表3:以下のようでなければならない表1に必要な

Notice | table3_ID | Flag 
hiji | 1   | true 
asas | 1   | false 

最終出力(注意、ID、フラグテーブルの列です)。

表2と表3の値に応じて、表1には、私は私が達成しようとしている以上のことで何を説明します。この

Name | table1_ID | Location | Sum 
rick | 1  | Gorets | 4 
alex | 3  | hebrew | 1 

のようになります。ご覧のように、最初のテーブルの列の合計は空です。これらは、table2とtable3にあるエントリに基づいて更新を取得します。

基本的には、 table1の 'ID'は、table2とtable3の 'ID'で検索されます。たとえば。 table2とtable3で値 '1'のIDが検索されます。 IDが2番目と3番目のテーブルに4回存在することがわかります。したがって、合計値は4となります。

同様に、他の2つのテーブルで3が検索され、1回だけ発生していることがわかるため、ID '3'の 'sum'列で1が更新されます'

私が達成しようとしていることを願っています。 3つのテーブルのデータに対してconsole.logを実行すると、結果は次のようになります。

表1: - console.log(userinfo);

[Object][Object] 
[0-1] 
    [0]: Object 
    Name: 'rick' 
    table1_ID: 1 
    Location:Gorets 
    Sum: 
    [1]: Object 
    Name: 'alex' 
    table1_ID: 3 
    Location:hebrew 
    Sum: 

他の2つのテーブルの出力形式と似ています。誰かが私にサムを更新する方法を教えてもらえますか?上記の計算値を使ってください。

答えて

1

あなたは表3および表2のカウントのための入力としてIDのすべてのカウントを取得するオブジェクトを使用し、表1

function count(r, a) { 
 
    r[a.ID] = (r[a.ID] || 0) + 1; 
 
    return r; 
 
} 
 

 
var table1 = [{ Name: 'rick', ID: 1, Location: 'Gorets', Sum: undefined }, { Name: 'alex', ID: 3, Location: 'hebrew', Sum: undefined }, { Name: 'foo', ID: 42, Location: 'bar', Sum: undefined }], 
 
    table2 = [{ City: 'wew', ID: 34, Sex: 'M' }, { City: 'rfgf', ID: 3, Sex: 'F' }, { City: 'dgff', ID: 1, Sex: 'M' }, { City: 'hgfhg', ID: 1, Sex: 'F' }], 
 
    table3 = [{ Notice: 'hiji', ID: 1, Flag: true }, { Notice: 'asas', ID: 1, Flag: false }]; 
 

 
table1.forEach(function (a) { 
 
    a.Sum = this[a.ID] || '-'; 
 
}, table2.reduce(count, table3.reduce(count, Object.create(null)))); 
 

 
document.write('<pre>' + JSON.stringify(table1, 0, 4) + '</pre>');
に合計を割り当てるためのルックアップとしてそれを使用することができます

編集

何すべての3つのテーブルの列名として代わりにIDの場合、我々はCOLとしてtable1_ID、table2_IDとtable3_IDを持っています列名。私はコードのpleasEにどのような変更を加えなければなりませんか?

function count(key) { 
 
    return function (r, a) { 
 
     r[a[key]] = (r[a[key]] || 0) + 1; 
 
     return r; 
 
    }; 
 
} 
 

 
var table1 = [{ Name: 'rick', table1_ID: 1, Location: 'Gorets', Sum: undefined }, { Name: 'alex', table1_ID: 3, Location: 'hebrew', Sum: undefined }, { Name: 'foo', table1_ID: 42, Location: 'bar', Sum: undefined }], 
 
    table2 = [{ City: 'wew', table2_ID: 34, Sex: 'M' }, { City: 'rfgf', table2_ID: 3, Sex: 'F' }, { City: 'dgff', table2_ID: 1, Sex: 'M' }, { City: 'hgfhg', table2_ID: 1, Sex: 'F' }], 
 
    table3 = [{ Notice: 'hiji', table3_ID: 1, Flag: true }, { Notice: 'asas', table3_ID: 1, Flag: false }]; 
 

 
table1.forEach(function (a) { 
 
    a.Sum = this[a.table1_ID] || '-'; 
 
}, table2.reduce(count('table2_ID'), table3.reduce(count('table3_ID'), Object.create(null)))); 
 

 
document.write('<pre>' + JSON.stringify(table1, 0, 4) + '</pre>');

+1

私は表示することができますどのように何match-が存在しない場合は ' - ' の代わりに合計として数0のは? – Patrick

+1

ありがとうございました。編集された答え – Patrick

+0

1つの最後の疑問...3つのテーブルすべてのカラム名としてIDの代わりに、カラム名としてtable1_ID、table2_ID、およびtable3_IDがあるとします。私はコードのpleasEにどのような変更を加えなければなりませんか? – Patrick

関連する問題