1.给定二进制字符串,将其换算成对应的十进制数字
输入:'11000000'
输出:192
function base10(str) {
let sum = 0;
let a = str.split('').reverse(); // 个位是第一个元素
for (var i = 0; i < a.length; i++) {
sum+=a[i]*Math.pow(2, i);
}
return sum;
}
2.给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
解题思路:通过toString方法,将数字x转化为字符串;通过字符串的split方法,将字符串转化为数组;通过数组的reverse方法将数组反转,通过数组的join方法,将数组拼接为字符串。比较正序字符串和反向字符串是否相等。
function isPalindrome(x) {
let a = x.toString();
let b = x.toString().split('').reverse().join('');
return a === b
};
3.小数转化为整数的几种方法:
(1)JavaScript中的Math.trunc()函数用于通过除去小数位来返回浮点数的整数部分。换句话说,Math.trunc()函数会切断该点和其右边的数字。
返回值:Math.trunc()函数返回给定数字的整数部分。
示例1:当将正数的float类型作为参数传递时:
示例2:当负数的float类型作为参数传递时:
示例3:当将0到1之间的正数作为参数传递时:
示例4:当将0到1之间的负数作为参数传递时:
(2)使用 parseInt()函数可解析一个字符串,并返回一个整数。
document.write(parseInt("10") + "
"); 结果:10
document.write(parseInt("10.33") + "
"); 结果:10
document.write(parseInt("34 45 66") + "
"); 结果:34
document.write(parseInt(" 60 ") + "
"); 结果:60
document.write(parseInt("40 years") + "
"); 结果:40
document.write(parseInt("He was 40") + "
"); 结果:NaN
document.write(parseInt("10",10)+ "
"); 结果:10
document.write(parseInt("010")+ "
"); 结果:10
document.write(parseInt("10",8)+ "
"); 结果:8
document.write(parseInt("0x10")+ "
"); 结果:16
document.write(parseInt("10",16)+ "
"); 结果:16
(3)Math.floor()向下取整
console.log(Math.floor(2.5)); //2
console.log(Math.floor(-2.5)); //-3
(4)Math.ceil()向上取整
Math.ceil():返回大于参数值的最小整数。
console.log(Math.ceil(2.5)); //3
console.log(Math.ceil(-2.5)); //-2
(5)Math.round()四舍五入
console.log(Math.round(2.5)); //3
console.log(Math.round(-2.5)); //-2
console.log(Math.round(-2.6)); //-3
4.请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素。如果数组中没有元素,则返回 -1 。
你可以假设数组是 JSON.parse 的输出结果。
示例 1 :
输入:nums = [null, {}, 3]
输出:3
解释:调用 nums.last() 后返回最后一个元素: 3。
Array.prototype.last = function() {
if(this.length>0) {
return this[this.length-1];
} else {
return -1;
}
};
/**
* const arr = [1, 2, 3];
* arr.last(); // 3
*/
5.给定一个整型参数 n,请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( n , n + 1 , n + 2 ,等等)。
示例 1:
输入:
n = 10
["call","call","call"]
输出:[10,11,12]
解释:
counter() = 10 // 第一次调用 counter(),返回 n。
counter() = 11 // 返回上次调用的值加 1。
counter() = 12 // 返回上次调用的值加 1。
/**
* @param {number} n
* @return {Function} counter
*/
var createCounter = function(n) {
// 每次调用会返回前一个值+1,使用函数柯里化 则createCounter()会返回一个函数,这个函数可以继续被调用
return ()=>{
return n++;
}
};
/**
* const counter = createCounter(10)
* counter() // 10
* counter() // 11
* counter() // 12
*/
6. 睡眠函数
请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠 millis 毫秒。要求此函数可以解析任何值。
示例 1:
输入:millis = 100
输出:100
解释:
在 100ms 后此异步函数执行完时返回一个 Promise 对象
let t = Date.now();
sleep(100).then(() => {
console.log(Date.now() - t); // 100
});
示例 2:
输入:millis = 200
输出:200
解释:在 200ms 后函数执行完时返回一个 Promise 对象
/**
* @param {number} millis
* @return {Promise}
*/
async function sleep(millis) {
return new Promise((resolve,reject)=>setTimeout(resolve,millis));
}
/**
* let t = Date.now()
* sleep(100).then(() => console.log(Date.now() - t)) // 100
*/
7.数组归约运算
请你编写一个函数,它的参数为一个整数数组 nums 、一个计算函数 fn 和初始值init 。返回一个数组 归约后 的值。
你可以定义一个数组 归约后 的值,然后应用以下操作: val = fn(init, nums[0]) , val = fn(val, nums[1]) , val = fn(val, nums[2]) ,... 直到数组中的每个元素都被处理完毕。返回 val 的最终值。
如果数组的长度为 0,它应该返回 init 的值。
请你在不使用内置数组方法的 Array.reduce 前提下解决这个问题。
示例 1:
输入:
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr; }
init = 0
输出:10
解释:
初始值为 init=0 。
(0) + nums[0] = 1
(1) + nums[1] = 3
(3) + nums[2] = 6
(6) + nums[3] = 10
Val 最终值为 10。
示例 2:
输入:
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr * curr; }
init = 100
输出:130
解释:
初始值为 init=100 。
(100) + nums[0]^2 = 101
(101) + nums[1]^2 = 105
(105) + nums[2]^2 = 114
(114) + nums[3]^2 = 130
Val 最终值为 130。
/**
* @param {number[]} nums
* @param {Function} fn
* @param {number} init
* @return {number}
*/
var reduce = function(nums, fn, init) {
if (nums.length===0) {
return init;
} else {
let i = 0;
let sum=init;
while(i