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类型作为参数传递时:
<script type="text/javascript"> document.write(Math.trunc(15.56)); // 输出:15
</script>
示例2:当负数的float类型作为参数传递时:
<script type="text/javascript"> document.write(Math.trunc(-15.56)); // 输出-15
</script>
示例3:当将0到1之间的正数作为参数传递时:
<script type="text/javascript"> document.write(Math.trunc(0.236)); // 输出:0
</script>
示例4:当将0到1之间的负数作为参数传递时:
<script type="text/javascript"> document.write(Math.trunc(-0.236)); // 输出:0
</script>
(2)使用 parseInt()函数可解析一个字符串,并返回一个整数。
document.write(parseInt("10") + "<br>"); 结果:10
document.write(parseInt("10.33") + "<br>"); 结果:10
document.write(parseInt("34 45 66") + "<br>"); 结果:34
document.write(parseInt(" 60 ") + "<br>"); 结果:60
document.write(parseInt("40 years") + "<br>"); 结果:40
document.write(parseInt("He was 40") + "<br>"); 结果:NaN
document.write(parseInt("10",10)+ "<br>"); 结果:10
document.write(parseInt("010")+ "<br>"); 结果:10
document.write(parseInt("10",8)+ "<br>"); 结果:8
document.write(parseInt("0x10")+ "<br>"); 结果:16
document.write(parseInt("10",16)+ "<br>"); 结果:16
(3)Math.floor()向下取整
console.log(Math.floor(2.5)); //2console.log(Math.floor(-2.5)); //-3
(4)Math.ceil()向上取整
Math.ceil():返回大于参数值的最小整数。
console.log(Math.ceil(2.5)); //3console.log(Math.ceil(-2.5)); //-2
(5)Math.round()四舍五入
console.log(Math.round(2.5)); //3console.log(Math.round(-2.5)); //-2console.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<nums.length) {sum=fn(sum,nums[i]);i++;}return sum;}
};