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给了我未捕获的类型错误:未定义不是一个函数
确定你选择了下划线扩展吗?它对我来说很好