2015-04-01 89 views

回答

1

对于后备compatibily目的:

var a = ["42.00", 33, 12.02, "30", 10]; 
var out; 

if (typeof(Array.prototype.map == 'function')) { 
    out = a.map(function(el){ return typeof(el) !== 'number' ? parseFloat(el) : el }); 
} 
else { 
    out = []; 
    for (var i = 0; i < a.length; ++i) { 
     out[i] = typeof(a[i]) !== 'number' ? parseFloat(a[i]) : a[i]; 
    } 
} 

console.log(out); 

如果元素已经是一个数字,你会不会解析它,否则它会的。

如果没有定义.map函数,它将继续使用常规for循环。这应该做的事,因为一些浏览器不支持某些ECMA函数(如IE9):

enter image description here

小提琴:: http://jsfiddle.net/kndgcty8/1/

+0

我得到.map函数未定义错误,但它没有做别的,所以我只把你的其他块,改变typeof(el)typeof(a [i])(可能是你的错误,因为复制/过去^^)现在它完美的作品,谢谢:) – Luckyn 2015-04-01 09:47:30

+0

@Luckyn:是的,我在发布后大约1分钟编辑了帖子,将el更改为[i]:p – briosheje 2015-04-01 09:51:09

+0

而且我看到你也修复了如果问题^^所有代码现在都正常工作:) – Luckyn 2015-04-01 10:06:05

0

var a = ["42.00", 33, 12.02, "30", 10]; 
 
var b=new Array(); 
 

 
for(i=0;i<a.length;i++) 
 
    b[i]=parseFloat(a[i]); 
 

 
alert(a); 
 
alert(b);

0

JavaScript的数组map方法:

var a = ["42.00", 33, 12.02, "30", 10] 
var b = a.map(function (elem) { 
    return parseInt(elem, 10) 
}) 
console.log(b) 
// [42, 33, 12, 30, 10] 

JSFiddle

+1

值得注意的是,这只会在IE9或更高版本(如果您使用IE当然) – Magrangs 2015-04-01 09:24:07

0
var a = ["42.00", 33, 12.02, "30", 10]; 
var b = []; 
a.forEach(function(num){ 
    b.push(parseFloat(num)); 
}); 
console.log(b); 
// [42, 33, 12, 30, 10] 

或者添加原型法阵:

Array.prototype.toInt = function (a){ 
    var b = []; 
    this.forEach(function(num){ 
     b.push(parseFloat(num)); 
    }); 
    return b; 
} 
var a = ["42.00", 33, 12.02, "30", 10]; 
console.log(a.toInt()); 

https://jsfiddle.net/0okLL93m/

我敢肯定,这可以更好地以某种方式写的,但工作得很好。

0

真的,有什么用编写代码的完整段落的东西,这个简单的了?这就是你需要:

var a = ["42.00", 33, 12.02, "30", 10] 

a.map(Number) // returns [42, 33, 12.02, 30, 10] 

(请注意,在JavaScript中所有数字都是64位浮点,没有点写他们明确为float)