2015-04-01 88 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)