我有一个对象数组,其中包含一个名为'memory'的属性,其值为MB
。我需要在GB
中转换包含具有'memory'值的对象的数组。我怎样才能使用Underscore.js
。
以下是代码:
var parseSize = function(obj){
if (obj === 0 ){
return 0;
} else {
return parseFloat(obj/1024).toFixed(2);
}
}
var testData=[
{ name: 'ddd',Vcpu: 2, memory: 4096, os: 'Microsoft Windows Server 2008 (32-bit)'},
{ name: 'eee',Vcpu: 2, memory: 2040, os: 'Microsoft Windows Server 2008 (32-bit)'},
{ name: 'ddd',Vcpu: 2, memory: 4096, os: 'Microsoft Windows Server 2008 (32-bit)'},
{ name: 'eee',Vcpu: 2, memory: 2040, os: 'Microsoft Windows Server 2008 (32-bit)'}
];
testData =_.invoke(testData , function(){
testData['memory'] = parseSize(testData['memory']) + " GB";
});
console.log(testData);
以上代码无效。请告诉我出错的地方。
添加Jsfiddle链接:http://jsfiddle.net/prashdeep/k29zuba2/
答案 0 :(得分:2)
代码中出现问题的答案:
_.each
testData
重新分配给结果"memory"
中每个项目的testData
属性,而不是testData
本身因此,将您的后半部分代码更改为:
_.each(testData , function(datum){
datum['memory'] = parseSize(datum['memory']) + " GB";
});
console.log(testData);
答案 1 :(得分:1)
您可以使用map。这是自ES5以来内置于JavaScript中的:
var result = testData.map(function(x) {
x.memory = parseSize(x.memory) + ' GB'
return x
})
答案 2 :(得分:1)
使用下划线_.each,您可以执行以下操作:
_.each(testData , function( item ){
item['memory'] = parseSize(item['memory']) + " GB";
});
请参阅jsfiddle example。
如果您想支持IE8等旧浏览器,请不要使用map或forEach。
答案 3 :(得分:0)
var parseSize = function(obj){
if (obj === 0 ){
return 0;
} else {
return parseFloat(obj/1024).toFixed(2);
}
}
var testData=[
{ name: 'ddd',Vcpu: 2, memory: 4096, os: 'Microsoft Windows Server 2008 (32-bit)'},
{ name: 'eee',Vcpu: 2, memory: 2040, os: 'Microsoft Windows Server 2008 (32-bit)'},
{ name: 'ddd',Vcpu: 2, memory: 4096, os: 'Microsoft Windows Server 2008 (32-bit)'},
{ name: 'eee',Vcpu: 2, memory: 2040, os: 'Microsoft Windows Server 2008 (32-bit)'}
];
testData.forEach(function(d){ d.memory = parseSize(d.memory); });
console.log(testData);