`
function string2int(s) {
var arr = [];
for (let x of s) {
arr.push(x);
}
arr.map(function (x) {return x*1;});
var result = arr.reduce(function (x, y) {return x*10 y;});
alert(result);
}
string2int('123456');
`
`
function string2int(s) {
var arr = [];
for (let x of s) {
arr.push(x*1);
}
var result = arr.reduce(function (x, y) {return x*10 y;});
alert(result);
}
string2int('123456');
`
如函式名string2int所示,這兩段代碼的目的都是將string '123456'轉為int 123456,思路是將'123456'轉為arr(['1', '2', '3', '4', '5', '6']),然后用每個char乘1將陣列arr中的元素變成int,最后用reduce函式得到預期的int 1234156。然而,結果發現只有第二段代碼運行正常,第一段會輸出結果10203040506。
我添加了警報(arr);在 arr.map(function (x) {return x*1;}); 在第一段代碼中,發現即使執行了map函式,陣列arr中的元素還是int型別,這是為什么呢?另外,那樣的話,最后的結果10203040506是怎么得來的呢?
uj5u.com熱心網友回復:
第一部分的問題是您正在使用map方法,它回傳一個新陣列并且永遠不會更改原始arr陣列。通過這樣做,您在 arr 中的專案仍然是“字串”型別,并且也是變數result。您可以通過將其添加到第一個函式的最后一行來驗證這一點:
console.log(typeof result);
為了讓您的代碼作業,您需要為 map 方法宣告一個新變數以回傳,然后在其上使用 reduce 方法。例子:
let newArr = arr.map(function (x) {return x*2;});
var result = newArr.reduce(function (x, y) {return x*10 y;});
編輯:或者,您可以使用forEach方法而不是map,并且原始陣列arr將被更改。
uj5u.com熱心網友回復:
第一個函式無法將數字(表示數字的字串)轉換為整數。arr侵入性最小的修復方法是在使用一元將數字推送到時進行該轉換 ......
function string2int(s) {
var arr = [];
for (let x of s) {
arr.push( x); // convert to int here
}
// arr.map(function (x) {return x*1;}); // this does nothing
var result = arr.reduce(function (x, y) {return x*10 y;});
alert(result);
}
string2int('123456');
它可以通過實作split('')第一個回圈的作業來改進,并且可以在 reduce 中發生從數字到 int 的轉換......
function string2int(s) {
return s.split('').reduce((a, digit) => a*10 digit, 0)
}
alert(string2int('123456'));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535473.html
標籤:javascript
