几个前端面试题

写代码和做代码题目还是有很大差别的

前端面试题

1,如果数组里的某两个元素相加等于16,则去除这两个元素。如 [1,3,1,15,13,2,16,0]  ==》[1,2]。

实现代码:

// 1.如果数组里的值某两个相加等于16,则删掉
  var arr = [1,3,1,15,13,2,16,0];
  arr.forEach(function( item1, index1 ){
    arr.forEach(function( item2, index2 ){
      if ( index1!=index2 && item1+item2==16  ) {
        arr[index1] = '#';
        arr[index2] = '#';
      }
    })
  })
  var newArr = arr.filter(function(item){
    if ( item == '#' ) {
      return false;
    }else{
      return true;
    }
  })
  console.log(arr, newArr);

点评:这个题目考察数组操作是否熟练,和实现思路。

2,[‘1′,’2′,’3’].map(parseInt)的返回值是什么?看截图

点评:这个题目考得比较综合,parseInt传入两个参数,传入map的函数可以传入三个参数,具体解析看下面。

parseInt() 函数能解析一个字符串,并返回一个整数,需要两个参数 (val, radix),
其中 radix 表示要解析的数字的基数。【该值介于 2 ~ 36 之间,并且字符串中的数字不能大于radix才能正确返回数字结果值】;
但此处 map 传了 3 个 (element, index, array),我们重写parseInt函数测试一下是否符合上面的规则。

function parseInt(str, radix) {
return str+'-'+radix;
};
var a=["1", "2", "3"];
a.map(parseInt); // ["1-0", "2-1", "3-2"] 不能大于radix

因为二进制里面,没有数字3,导致出现超范围的radix赋值和不合法的进制解析,才会返回NaN

所以[“1”, “2”, “3”].map(parseInt) 答案也就是:[1, NaN, NaN]

实现三位数分节法

123213.23 转成 123,213.23

function format_number(n){
    var isFloat = n.toString().indexOf('.') > -1 ? true : false;
    if ( isFloat ) {
      var dotPart = n.toString().substr( n.toString().indexOf('.') );
    }
    var b=parseInt(n).toString();
    var len=b.length; 
    if(len<=3){
      return b;
    } 
    var r=len%3; 
    var intPart = r>0?b.slice(0,r)+","+b.slice(r,len).match(/d{3}/g).join(","):b.slice(r,len).match(/d{3}/g).join(","); 
    return isFloat ? intPart + dotPart : intPart;
  }
  console.log( format_number( 1231232123.231 ) );

点评:这个题目有点难,很综合,关键思路要写出来。

2021-04-07 更新

三位数分节的正则解法有点难写,似乎还得区分带小数点和不带小数点的情况。难道不能一个正则搞定吗?

var n = '123456789'
n = n.replace(/\d(?=(\d{3})+$)/g, a => a + ',')
console.log(n)

var n = '123456789.12'
n = n.replace(/\d(?=(\d{3})+\.)/g, a => a + ',')
console.log(n)

4,浮点数的比较,查看参考链接。

js浮点数运算
js浮点数运算

点评:这个比较的方式其实是一个思路考察,可以先比较整数部分,再比较小数部分;如果整数部分不能比较出结果,就使用parseInt转化小数部分。

参考链接

作者: 曾小乱

喜欢写点有意思的东西

《几个前端面试题》有3个想法

评论已关闭。