2013-06-05 87 views
1

我想映射我的對象的一部分,但我有一些未定義的變量。下面是轉儲到JSON我的對象(數據,這是一個對象數組):使用jquery映射對象字段

[ 
    { 
    "key": "Sam", 
    "values": [ 
     { 
     "label": "Name", 
     "value": 38 
     }, 
     { 
     "label": "Surname", 
     "value": 38 
     }, 
     { 
     "label": "Phone", 
     "value": 36 
     }, 
     { 
     "label": "Text", 
     "value": 38 
     }, 
     { 
     "label": "Website", 
     "value": 28 
     }, 
     { 
     "label": "Rating", 
     "value": 0 
     }, 
     { 
     "label": "Factor", 
     "value": 2 
     }, 
     { 
     "label": "Cases", 
     "value": 2 
     }, 
     { 
     "label": "Hours", 
     "value": 5 
     } 
    ], 
    "color": "#E05353" 
    }, 
    { 
    "key": "Niki", 
    "values": [ 
     { 
     "label": "Name", 
     "value": 38 
     }, 
     { 
     "label": "Surname", 
     "value": 38 
     }, 
     { 
     "label": "Phone", 
     "value": 37 
     }, 
     { 
     "label": "Text", 
     "value": 38 
     }, 
     { 
     "label": "Website", 
     "value": 4 
     }, 
     { 
     "label": "Rating", 
     "value": 0 
     }, 
     { 
     "label": "Factor", 
     "value": 1 
     }, 
     { 
     "label": "Cases", 
     "value": 0 
     }, 
     { 
     "label": "Hours", 
     "value": 0 
     } 
    ], 
    "color": "#293F90" 
    }, 
    { 
    "key": "Dan", 
    "values": [ 
     { 
     "label": "Name", 
     "value": 21 
     }, 
     { 
     "label": "Surname", 
     "value": 21 
     }, 
     { 
     "label": "Phone", 
     "value": 6 
     }, 
     { 
     "label": "Text", 
     "value": 21 
     }, 
     { 
     "label": "Website", 
     "value": 2 
     }, 
     { 
     "label": "Rating", 
     "value": 1 
     }, 
     { 
     "label": "Factor", 
     "value": 3 
     }, 
     { 
     "label": "Cases", 
     "value": 5 
     }, 
     { 
     "label": "Hours", 
     "value": 1 
     } 
    ], 
    "color": "#32B6E8" 
    }, 
    { 
    "key": "Jake", 
    "values": [ 
     { 
     "label": "Name", 
     "value": 58 
     }, 
     { 
     "label": "Surname", 
     "value": 58 
     }, 
     { 
     "label": "Phone", 
     "value": 56 
     }, 
     { 
     "label": "Text", 
     "value": 58 
     }, 
     { 
     "label": "Website", 
     "value": 30 
     }, 
     { 
     "label": "Rating", 
     "value": 1 
     }, 
     { 
     "label": "Factor", 
     "value": 2 
     }, 
     { 
     "label": "Cases", 
     "value": 1 
     }, 
     { 
     "label": "Hours", 
     "value": 2 
     } 
    ], 
    "color": "#77B242" 
    }, 
    { 
    "key": "Steve", 
    "values": [ 
     { 
     "label": "Name", 
     "value": 100 
     }, 
     { 
     "label": "Surname", 
     "value": 100 
     }, 
     { 
     "label": "Phone", 
     "value": 100 
     }, 
     { 
     "label": "Text", 
     "value": 100 
     }, 
     { 
     "label": "Website", 
     "value": 33 
     }, 
     { 
     "label": "Rating", 
     "value": 2 
     }, 
     { 
     "label": "Factor", 
     "value": 2 
     }, 
     { 
     "label": "Cases", 
     "value": 0 
     }, 
     { 
     "label": "Hours", 
     "value": 17 
     } 
    ], 
    "color": "#FFA614" 
    } 
] 

我需要做的是通過100每個鍵的值乘值。以下是我的了:

$.each(data, function(i,val){ 
     $.each(val.values, function(i,v){ 
     v.value = (v.value * 100); 
     }); 
    }); 

資深開發商告訴我,我可以更好地與$.map,怎麼辦呢?

+1

在這裏我真的沒有看到使用'$ .map'有什麼優勢。 '$ .each'非常好。你可以用'v.value * = 100;'縮短它的一小部分。 *編輯:*這是假設你想保持這種結構。 –

+0

你檢查了什麼'val'實際上是?你在看到'console.log'時看到了什麼? – rednaw

+0

'arr = $ .map(arr,function(v,i){ \t return v.value =(v.value * 100); });'當使用映射器時..但是undefines不是從使用的foreach。 –

回答

1

這裏的地圖版本 - 雖然我與你的「資深」的開發商,它的更好不以爲然:

var mappedObjects = $.map(data, function(val){ 
     return { 
      key: val.key, 
      values: $.map(val.values, function(v) { return { label: v.label, value: v.value * 100 }; } 
     }; 
}); 

在我看來你的代碼是很多更清晰,更何況事實,即費利克斯如下所述,你不必要地創建了很多新的對象。

+3

這確實浪費了內存(創建所有這些對象): -/ –

+1

啊 - 這是一個很好的觀點 - 我只是覺得代碼更清晰OP如何擁有它 - 我甚至沒有考慮過這方面。 –