2017-08-07 8 views
1

ユーザーがデータの表を記入し、テーブルを反復し、IDをグループ化し、各グループ== 100であることを確認します。キーと一致するオブジェクトのjquery配列を確認します。 + =値が一致する場合は新しいオブジェクトをプッシュ

私の計画テーブルの行をループし、キー:値オブジェクトを作成し、配列に一致するキーがないかチェックします。キーが一致する場合は、値を既存の配列オブジェクトに追加します。一致しない場合は、新しい項目を押します。

var gidArr = 
[ 
    { 
     gid: '123', 
     ratio: '20' 
    }, 
    { 
     gid: '123', 
     ratio: '40' 
    }, 
    { 
     gid: '432', 
     ratio: '50' 
    }, 

] 

結果は次のようになります:私は試してみました

{ gid:123, ratio:60 }, 
{ gid:432, ration: 50} 

カップルの事:

function GIDRatio(gid, ratio) { 
    this.gid = gid; 
    this.ratio = parseFloat(ratio); 
} 
     var item = new GIDRatio(gid, ratio); 

1: 
     if(gid in gidArr) { 
      gidArr.ratio += item.ratio; 
     } else { 
      gidArr.push(item); 
     } 

2: 

    $.each(gidArr, function(i, v) { 
     if(v.gid === item.gid) { 
      v.ratio += item.ratio; 
     } else { 
      gisArr.push(item); 
     } 
    }) 

フィドル:https://jsfiddle.net/8vw4eehs/11/

答えて

2

あなたが作ることができ、この配列を想定し

0の使用メソッドを使用して、元の配列を新しい構造に変換します。

acc、つまりaccumulated arrayにはすでにgidがあるかどうかを確認するだけで、reduceの機能が使用できます。そうでない場合は、配列を押し込みます。はいの場合は、ratioの合計を計算し、ratioを更新します。

var gidArr = 
 
[ 
 
    { 
 
     gid: '123', 
 
     ratio: '20' 
 
    }, 
 
    { 
 
     gid: '123', 
 
     ratio: '40' 
 
    }, 
 
    { 
 
     gid: '432', 
 
     ratio: '50' 
 
    }, 
 

 
]; 
 

 
const newArr = gidArr.reduce((acc, cur) => { 
 
    if(acc.some(x => x.gid === cur.gid)) { 
 
    acc.map(x => { 
 
     if(x.gid === cur.gid) { 
 
     x.ratio = (+x.ratio) + (+cur.ratio); 
 
     } 
 
     return x; 
 
    }); 
 
    } else { 
 
    acc.push(cur); 
 
    } 
 
    return acc; 
 
},[]) 
 

 
console.log(newArr);

+0

ありがとうございました。しばらくお待ちください。私は認識していないし、人々が答えている方法のため、私は新しいjqueryの本を購入し、いくつかのより多くの読書をする必要があるように見えます。 – BattlFrog

0

使用Array.prototype.reduceその後、hashtableとにひそかにまで蓄積ratio - デモ下記参照:

var gidArr=[{gid:'123',ratio:'20'},{gid:'123',ratio:'40'},{gid:'432',ratio:'50'}]; 
 

 
var hash = gidArr.reduce(function(p,c){ 
 
    if(p[c.gid]) 
 
    p[c.gid].ratio += +c.ratio; 
 
    p[c.gid] = p[c.gid] || c; 
 
    p[c.gid].ratio = +p[c.gid].ratio; 
 
    return p; 
 
},Object.create(null)) 
 

 
var result = Object.keys(hash).map(function(e){ 
 
    return hash[e]; 
 
}); 
 
console.log(result);

0

var gidArr = [ 
 
    {gid: '123', ratio: '20'}, 
 
    {gid: '123', ratio: '40'}, 
 
    {gid: '432', ratio: '50'}, 
 
    {gid: '123', ratio: '40'} 
 
]; 
 

 
/* Creating an array of objects */ 
 

 
var obj = gidArr.reduce((a,b) => (a[b.gid] = b.gid in a ? a[b.gid]+(+b.ratio):(+b.ratio), a),{}); 
 
var arr = Object.keys(obj).map(x => ({[x]:obj[x]})); 
 

 
console.log(arr, "\n---------------------------") 
 

 
/* Filtering based on values being 100 */ 
 

 
var result = arr.filter(o => Object.values(o)[0] === 100); 
 
console.log(result)
.as-console-wrapper {max-height: 100%!important; top: 0}

関連する問題