2017-07-28 9 views
1

私はオブジェクトが内部にある配列を持っています。私はオブジェクトの値を数えます。 スクリプトが機能しています。少し短くする(DRY)ことは可能ですか?jqueryを使用してオブジェクト要素をカウントする方法

var myData = [ 
    { sku: "9017WKs43dp", quan: 100, farbigkeit40: "A90ZUKOs4599", proof: "A90ZUKOs4499" }, 
    { sku: "9017WKs18dp", quan: 100 }, 
    { sku: "9017WAs18dp", quan: 50, eindruck: "A90ZUKOs4799" }, 
    { sku: "9017WAs18dp", quan: 40, eindruck: "A90ZUKOs4799", proof: "A90ZUKOs4499" }, 
    { sku: "9017WKs43dp", quan: 200, farbigkeit44:"A90ZUKOs4699", proof: "A90ZUKOs4499" }, 
    { sku: "9017WKs43dp", quan: 200, farbigkeit40:"A90ZUKOs4599" } 
]; 

    function countElements() { 
     var res = {}; 
     myData.forEach(function(value){ 

      res[value.sku]=res[value.sku]||{quan:0}; 
      res[value.sku].quan+=1*value.quan; 

      if(value.farbigkeit40 != undefined) { 
       res[value.farbigkeit40] = res[value.farbigkeit40] || {quan:0}; 
       res[value.farbigkeit40].quan +=1; 
      } 
      if(value.farbigkeit44 != undefined) { 
       res[value.farbigkeit44] = res[value.farbigkeit44] || {quan:0}; 
       res[value.farbigkeit44].quan +=1; 
      } 
      if(value.proof != undefined) { 
       res[value.proof] = res[value.proof] || {quan:0}; 
       res[value.proof].quan +=1; 
      } 
      if(value.eindruck != undefined) { 
       res[value.eindruck] = res[value.eindruck] || {quan:0}; 
       res[value.eindruck].quan +=1; 
      } 
     }); 
     return res; 
    } 
    console.log(countElements()); 
    $('#result').html(JSON.stringify(countElements(),null,4)); 

第2のforEachがあります。私はこれを試みましたが、私は同じ結果を得ていませんでした。

["farbigkeit40","farbigkeit44","proof","eindruck"].forEach(function(p) { 
      res[value.p]=res[value.p] || {quan:0}; 
      res[value.p].quan += 1; 
      }) 

答えて

0

あなたはほぼあります。 value.pの代わりにvalue[p]を使用してください。

object.proppropobjectのproprtyへの言及。

object[prop]objectの中の 'value of'の値がpropのプロパティへの参照。

など。 p = 'farbigkeit44'value[p]value['farbigkeit44']と同じです。value.farbigkeit44と同じです。

関連する問題