Javascript 使用下划线在另一个对象内部修改对象内部的数组?

Javascript 使用下划线在另一个对象内部修改对象内部的数组?,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我有一个对象,然后有另一个对象作为值。对象将数组作为值。我需要修改每个数组。以下是我的对象的两项: '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

我有一个对象,然后有另一个对象作为值。对象将数组作为值。我需要修改每个数组。以下是我的对象的两项:

 '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?
});
但我不知道;我不知道应该在map函数中返回什么,这样我的var将是一个对象


正确的方法是什么?

这对我的小提琴有效:

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);
    }    
}
var汽车={
“丰田普锐斯混合动力掀背车”:
{ '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 ] },
“丰田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 ] 
}    
}    
对于(var i=0;i对于(var i=1;i

,解决方案不是使用u.map,而是在集合上运行,使用u.map随时更改值

_.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);
    });
});

你能使用jquery吗?我想我可以修复它,但我更喜欢jquery而不是下划线。这是一个在nodeah上运行的服务器端应用程序。好的,我可以用纯js来完成。Fiddle给了我
未捕获的类型错误:未定义不是一个函数
确定你选择了下划线扩展吗?它对我来说很好