上次寫過一遍關於這道題的講解,有些繁瑣,如今從新寫一下web
let arr = [1,2,3,4];
arr = arr.map(parsetInt);
console.log(arr);
複製代碼
arr = arr.map(parsetInt);
重點就是在這一句話,這裏有兩個知識點,一個是map
,一個是parseInt
數組
[].map()
是數組原型上的一個方法,它是遍歷數組中的每一項,而且支持返回值的。例如:[1,2,3].map(item=>{
return item*2; //[2,4,6]
});
複製代碼
具體的map方法:mdn講解編輯器
從上面的例子能夠看出來,map是能夠遍歷數組中的每一項的,在這個題目中就是,當map遍歷數組中的每一項時,都會執行一次parseInt,傳遞給它兩個參數:當前項和對應的索引,而且把parseInt執行的返回結果替換數組中當前項,最後以新數組方式返回,原始數組不變ui
let arr = [1,2,3,4];
arr = arr.map(parsetInt);
console.log(arr);
/* * arr = arr.map(parsetInt) => * arr = arr.map((item,index)=>{ * return parseInt(item,index) * }); */ 複製代碼
它能夠支持兩個參數:parseInt([value],[radix]):url
parsetInt的理解:spa
parseInt('12px');
/* * => 第二個參數默認是10: parseInt('12px',10) * => 接下來找字符串中符合10進制的值,從左到右找,遇到一個非10進制的值,則結束查找(不論後面是否還有,都不在查找了) * => 遇到不是10進制是中止查找,所以查找到的就是:'12' * => 再把找到的結果轉換爲10進制的數字 * => 最後結果:12 */
複製代碼
parseInt('12px',0) => 12 //第二個參數是0,和10是同樣的,所以按照10進制查找便可
parseInt('12px',1) => NaN //第二個參數是1,不在2~36之間,因此是NaN
複製代碼
parseInt([10,20,30])
// 把數組變爲字符串,再把radix補充
// => parseInt('10,20,30',10)
// 找符合10進制的內容
// => '10'
// 最後轉換爲10進制
// => 10
複製代碼
// 把n轉爲二進制
let n = 32;
/* * 32/2 => 16 餘數:0 * 16/2 => 8 餘數:0 * 8/2 => 4 餘數:0 * 4/2 => 2 餘數:0 * 2/2 => 1 餘數:0 * 1/2 => 0 餘數:1 * 倒着把全部的值拼接起來就是轉換爲二進制的值 * (32).toString(2) 這也是直接轉換爲二進制 => "100000" */
複製代碼
2.把其它進制N轉換爲10進制:按照當前位的權重,計算對應的方來求出結果code
let n = 2057; //按照八進制 => 十進制
// 2*8^3 + 0*8^2+ 5*8^1 + 7*8^0
// 1024 + 0 + 40 + 7 => 1071
複製代碼
let n = '23AF'; //把16進制轉換爲十進制
// 2*16^3 + 3*16^2 + A(10)*16^1 + F(15)*16^0
// 8192 + 768 + 160 + 15 =>9135
複製代碼
let n = 12.21; //三進制轉換爲十進制
//1*3^1 + 2*3^0 + 2*3^-1 + 1*3^-2
// 3 + 2 + 2*(1/3) + 1*(1/(3*3)) => 5.777777777777778
複製代碼
/* * parseInt(1,0) => 1 => 10進制的1轉爲10進制仍是1 * parseInt(2,1) => NaN => 1不在2~36的範圍內,直接返回NaN * parseInt(3,2) => parseInt('3',2) => NaN => 字符串中並無符合2進制的值 * parseInt(4,3) => parseInt('4',3) => NaN => 字符串中並無符合3進制的值 */
複製代碼
let arr = [10.18, 0, 10, 25, 23];
arr = arr.map(parseInt);
console.log(arr);
複製代碼
步驟:索引
/* * parseInt(10.18,0) => parseInt('10.18',10) => parseInt('10',10) => 10 * parseInt(0,1) => NaN * parseInt(10,2) => parseInt('10',2) => parseInt('10',2) => 0*2^0 + 1*2^1 => 2 * parseInt(25,3) => parseInt('25',3) => parseInt('2',3) => 2*3^0 => 2 * parseInt(23,4) => parseInt('23',4) => parseInt('23',4) => 3*4^0 + 2*4^1 => 11 */
複製代碼