面经练习(九)

1.这个函数名字是a,使得a被执行之后有如下效果,输出1、2、3(闭包实现)

a(); // 函数返回值为1

a(); // 函数返回值为2

a(); // 函数返回值为3


        let a = (function() {
            let counter = 0
            return function() {
                return (++counter)
            }
        })()
        console.log(a());
        console.log(a());
        console.log(a());

2.实现一个函数,用于输出指定字符串中的最大相同连续字符的长度function

        function maxLength(str) {
            let arr = str.split('');
            let count = 1;
            let max = 1;
            for (let i = 1; i < arr.length; i++) {
                if (arr[i] === arr[i - 1]) {
                    count++;

                } else {
                    max = max > count ? max : count;
                    count = 1;
                }
            }
            console.log(max);

        }
        maxLength('sdsaaaaacsackkkkkkkkdddd');

3.如何定义一个链表及相关学习

链表

4.给定字符串,求出现次数最多的那个字母及次数,如有多个重复则都输出

        function maxstr(str) {
            var map = new Map();
            var arr = str.split('');
            for (var i = 0; i < str.length; i++) {
                if (!map.has(arr[i])) {
                    map.set(arr[i], 1);
                } else {
                    var mxx = map.get(arr[i]);
                    mxx++;
                    map.set(arr[i], mxx);
                }
            }
            console.log(map);
            var result = [];
            var max = 0;
            map.forEach(function(value, key) {
                max = max > value ? max : value
            })
            console.log(max);
            map.forEach(function(value, key) {
                if (value == max) {
                    result.push(key);
                }
            })
            console.log(result);
        }
        maxstr('sdsaaaaacsackkkkkkkkkdddd');

这里要注意,遍历map要用forEach方法,而且forEach方法参数顺序为value,key不要弄反了
map和set

5.排序问题fed123ab456c" => "abcdef123456

        function sort1(a, b) {
            if (a < b) {
                return -1
            } else if (a > b) {
                return 1
            } else {
                return 0
            }
        }
        let str = 'fdsf313141';
        let arr = str.split('');
        console.log(arr.sort(sort1));
        let arr1 = [];
        let arr2 = [];
        let arr3 = [];
        for (let i = 0; i < arr.length; i++) {
            if (arr[i].charCodeAt() >= 97 && arr[i].charCodeAt() <= 122) {
                arr2.push(arr[i])
            } else {
                arr1.push(arr[i])
            }
        }
        console.log(arr3.concat(arr2).concat(arr1));

注意一下sort()排序方法会调用每个数组项的toString()转型方法,所以比较的相当是字符串,所以10和5比较的时候,相当于’10‘跟’5‘比较,‘1’<‘5’
结果为10<5,需要对sort函数对上述处理

6.Number()转换规则

在这里插入图片描述
js类型转换

7.判断js空对象的方法

判断js空对象的方法

8.margin和padding的值是百分比的时候是怎么计算的?

百分比取值的计算
对元素的margin和padding设置百分比的时候,他的百分比是相对于父元素的宽度width计算的,margin上下左右都是如此。
如果没有为元素声明width的时候,此时元素的宽度取决于父元素的width,这样可以得到流式布局,元素的外边距会扩大和缩小来适应父元素的大小。
为什么都是相对于宽度而不是高度:
CSS权威指南中的解释:
我们认为,正常流中的大多数元素都会足够高以包含其后代元素(包括外边距),如果一个元素的上下外边距是父元素的height的百分数,就可能导致一个无限循环,父元素的height会增加,以适应后代元素上下外边距的增加,而相应的,上下外边距因为父元素height的增加也会增加,如此循环。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值