2014-09-19 40 views
1

我有一個對象,然後有另一個對象作爲值。並且該對象具有數組作爲值。我需要修改每個數組。下面是2項我的對象:使用Underscore修改另一個對象內的對象內的數組?

'Toyota Prius hybrid hatchback': 
    { '2001': [ 2, 8.2, 2, 10, 8, 8 ], 
    '2002': [ 2, 7.6, 1, 9, 6, 6 ], 
    '2004': [ 10, 45.900000000000006, 7, 50, 43, 43 ], 
    '2005': [ 17, 75.1, 11, 82, 62, 78 ], 
    '2006': [ 27, 119.6, 17, 133, 106, 120 ], 
    '2007': [ 20, 84.70000000000002, 17, 99, 87, 92 ], 
    '2008': [ 33, 139.49999999999997, 17, 154, 124, 141 ], 
    '2009': [ 66, 292.40000000000003, 49, 322, 273, 298 ], 
    '2010': [ 58, 259.0999999999999, 39, 281, 240, 263 ], 
    '2011': [ 22, 96.50000000000001, 15, 107, 90, 101 ], 
    '2012': [ 23, 104.70000000000002, 20, 114, 92, 105 ] }, 
'Toyota RAV4 SUV': 
    { '2001': [ 1, 3.9, 0, 4, 4, 3 ], 
    '2002': [ 7, 27.4, 5, 28, 27, 23 ], 
    '2003': [ 7, 28.900000000000002, 4, 35, 27, 26 ], 
    '2004': [ 2, 7.3, 1, 9, 7, 5 ], 
    '2005': [ 6, 24.200000000000003, 5, 29, 25, 19 ], 
    '2006': [ 11, 45.6, 10, 50, 46, 39 ], 
    '2007': [ 9, 38.599999999999994, 7, 45, 35, 34 ], 
    '2008': [ 10, 43.1, 8, 47, 43, 39 ], 
    '2009': [ 11, 47.5, 8, 54, 48, 42 ], 
    '2010': [ 7, 31.5, 5, 35, 32, 28 ], 
    '2011': [ 11, 47, 7, 54, 47, 41 ], 
    '2012': [ 11, 51.3, 9, 55, 51, 47 ] }, 

所以我需要每一個項目上的第一個項目在數組中分裂,然後在100和圓形的所有物品乘第三個項目。

我試圖用下劃線地圖做像這樣:

var newObj = _.map(myObj, function(value, key){ 
    var b = _.map(value, function(value, key){ 
     var rev = value[0]; 
     var rat = (value[1]/rev).toFixed(1); 
     var rec = (value[2]/rev*100).toFixed(0); 
     var per1 = (value[3]/rev).toFixed(1); 
     var per2 = (value[4]/rev).toFixed(1); 
     var per3 = (value[5]/rev).toFixed(1); 
     // What should I return so my b variable would be an object? 
    }); 
    // What should I return so my newObj variable would be an object? 
}); 

但我不;知道我應該怎麼返回地圖功能,所以我的VAR將是一個對象。

什麼是正確的方法來做到這一點?

+0

你可以使用jQuery?我想我可以修復它,但我更喜歡jQuery而不是下劃線 – Balder 2014-09-19 08:59:04

+0

這是運行在節點 – 2014-09-19 09:00:03

+0

上的服務器端應用程序啊,好吧,我可以用純js做到這一點 – Balder 2014-09-19 09:05:34

回答

1

一個解決方案不能使用_.map只是運行在您的收藏改變與_.each的去值。

_.each(myObj, function(item, key){ 
    _.each(item, function(value, key){ 
     var rev = value[0]; 
     value[1] = (value[1]/rev).toFixed(1); 
     value[2] = (value[2]/rev*100).toFixed(0); 
     value[3] = (value[3]/rev).toFixed(1); 
     value[4] = (value[4]/rev).toFixed(1); 
     value[5] = (value[5]/rev).toFixed(1); 
    }); 
}); 

http://jsfiddle.net/0k96v1ts/2/

+0

小提琴給了我'未捕獲的TypeError:undefined不是函數' – 2014-09-19 09:40:24

+0

確定你選擇了下劃線擴展名?它對我來說工作得很好 – michp 2014-09-19 09:46:31

1

這個工作對我的小提琴:

var cars ={ 
'Toyota Prius hybrid hatchback': 
    { '2001': [ 2, 8.2, 2, 10, 8, 8 ], 
    '2002': [ 2, 7.6, 1, 9, 6, 6 ], 
    '2004': [ 10, 45.900000000000006, 7, 50, 43, 43 ], 
    '2005': [ 17, 75.1, 11, 82, 62, 78 ], 
    '2006': [ 27, 119.6, 17, 133, 106, 120 ], 
    '2007': [ 20, 84.70000000000002, 17, 99, 87, 92 ], 
    '2008': [ 33, 139.49999999999997, 17, 154, 124, 141 ], 
    '2009': [ 66, 292.40000000000003, 49, 322, 273, 298 ], 
    '2010': [ 58, 259.0999999999999, 39, 281, 240, 263 ], 
    '2011': [ 22, 96.50000000000001, 15, 107, 90, 101 ], 
    '2012': [ 23, 104.70000000000002, 20, 114, 92, 105 ] }, 
'Toyota RAV4 SUV': 
    { '2001': [ 1, 3.9, 0, 4, 4, 3 ], 
    '2002': [ 7, 27.4, 5, 28, 27, 23 ], 
    '2003': [ 7, 28.900000000000002, 4, 35, 27, 26 ], 
    '2004': [ 2, 7.3, 1, 9, 7, 5 ], 
    '2005': [ 6, 24.200000000000003, 5, 29, 25, 19 ], 
    '2006': [ 11, 45.6, 10, 50, 46, 39 ], 
    '2007': [ 9, 38.599999999999994, 7, 45, 35, 34 ], 
    '2008': [ 10, 43.1, 8, 47, 43, 39 ], 
    '2009': [ 11, 47.5, 8, 54, 48, 42 ], 
    '2010': [ 7, 31.5, 5, 35, 32, 28 ], 
    '2011': [ 11, 47, 7, 54, 47, 41 ], 
    '2012': [ 11, 51.3, 9, 55, 51, 47 ] 
    }  
}  

for (var i = 0;i< Object.keys(cars).length; i++) 
{ 
    var car = cars[Object.keys(cars)[i]]; 
    for (var j = 0; j < Object.keys(car).length; j ++) 
    { 
     var year = car[Object.keys(car)[j]]; 
     processArray(year);  
    } 
} 


function processArray(arr) 
{  
    for (var i=1;i<arr.length; i++) 
    { 
     arr[i] = Math.round(arr[i]/arr[0] * 100); 
    }  
} 

http://jsfiddle.net/7hjLznym/3/

相關問題