2013-06-05 49 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如何拥有它 - 我甚至没有考虑过这方面。 –