Skip to content

Latest commit

 

History

History
172 lines (159 loc) · 4.4 KB

鹅厂提前批在线编程.md

File metadata and controls

172 lines (159 loc) · 4.4 KB

鹅厂提前批在线编程

1

有一个包含数据列表的页面,数据行数不定,每一行数据都有一个删除按钮,单击删除按钮删除该列数据,请用JavaScript实现该功能

<ul>
  <li>一<button>删除一</button></li>
  <li>二<button>删除二</button></li>
  <li>三<button>删除三</button></li>
  <li>四<button>删除四</button></li>
  <li>五<button>删除五</button></li>
  <li>六<button>删除六</button></li>
</ul>

解答:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
    <ul id="ul">
        <li><button>删除一</button></li>
        <li><button>删除二</button></li>
        <li><button>删除三</button></li>
        <li><button>删除四</button></li>
        <li><button>删除五</button></li>
        <li><button>删除六</button></li>
    </ul>
  <script>
    // 利用事件委托
    let el = document.getElementById('ul');
    el.addEventListener('click', (e)=>{
      // button触发事件,要删除的是li,所以获取其父节点
      let liNode = e.target.parentNode
      // 父.removeChild(子);删除掉子
      el.removeChild(liNode);
    });
  </script>
</body>
</html>

2

完成函数func,实现模板替换功能

var data = {name:'xiaoming',age:'20'};
var template = 'My name is {$name},my age is {$age}.';
func(template,data) => 'My name is xiaoming,my age is 20.'

解答:

    let data = {name:'xiaoming',age:'20'};
    let template = 'My name is {$name},my age is {$age}.';
    const func = (template, data) => {
      // 方括号用于查找某个范围内的字符
      let re = /{\$([\w]+)}/g;
      let result = null;
      let str = template;
      let value = '';
      while ((result = re.exec(template)) != null)  {
        console.log(result);
        if (data.hasOwnProperty(result[1])){
          value = data[result[1]];
          str = str.replace(result[0],value);
        }
      }
      return str;
    }
    console.log(func(template,data));

3

完成函数 func(obj),实现类似 JSON.stringify 的功能

let obj = {a:0, b:{c:"1",d:[2,3,4]}}      
func(obj) => '{"a":0,"b":{"c":"1","d":[2,3,4]}}'
    let obj = {
      a:0, 
      b:{
        c:"1",
        d:[2,3,4]
      }
    }
    // func(obj) => '{"a":0,"b":{"c":"1","d":[2,3,4]}}'
    const func = (val) => {
      let s = '';
      if(typeof val === 'number'){
        return val.toString();
      } else if(typeof val === 'string'){
        return '"' + val + '"';
      } else if(val instanceof Array){
        return '[' + val.toString() + ']';
      } else if(val instanceof Object){
        s += '{';
        let arr = [];
        for(let key in val){
          arr.push('"' +  key + '":' + func(val[key]));
        }
        s += arr.join(",") + '}';
        return s;
      }
    }  
    console.log(func(obj));

4

完成函数 func,接受数组作为参数,数组元素包含整数或数组,函数返回扁平化后的数组

func([1,[2,[[3,4],5],6]]) => [1,2,3,4,5,6]
    let arr = [1,[2,[[3,4],5],6]];
    // func([1,[2,[[3,4],5],6]]) => [1,2,3,4,5,6]
    const func = (val) => {
      let newArr = [];
      if (val instanceof Array){
        for(let i=0;i<val.length;i++){
          if(typeof val[i] === 'number'){
            newArr.push(val[i]);
          }else{
            newArr = newArr.concat(func(val[i]));
          }
        }
      }
      return newArr;
    }  
    console.log(func(arr));

5

编写正则,检验 email 地址的合法性:

var re = /^\w[\w\.]+@[\w]+\.(com|org)$/;
console.log(re.test('someone@gmail.com'));
console.log(re.test('bill.gates@microsoft.com'));
console.log(re.test('tom@voyager.org'));
console.log(re.test('.eee@88.com'));

6

变量作用域问题(请实现foo方法,让其有如下行为):

    void function(){
      var a = 6,b=7;
      foo(function(){
        console.log(a+b);
      })
    }();
VM6338:3 Uncaught ReferenceError: a is not defined...

请实现,变成:

    var a = 6,b = 7;
    foo(function(){
      console.log(a + b);
    });
    13

7

随机数生成函数,产生[0,5)之间的随机整数,每个数字概率1/5,如何使用这个函数产生[0,7)之间的随机整数,每个数字的概率为1/7