美文网首页
专题十、每日一题(编程题)

专题十、每日一题(编程题)

作者: 田田kyle | 来源:发表于2017-09-10 22:20 被阅读6次

    一、实现一个filter函数,模拟原生的filter函数,filter(list,predicate)
    遍历list中的每个值,返回所有通过predicate真值检测的元素所组成的数组
    例:var events = filter([1,2,3,4,5,6],function(num){
    return num %2 == 0;});
    =>[2,4,6]
    function filter(list,predicate) {
    var list = []
    var array = list.map(predicate)
    array.forEach(function(ele,index){
    if (Boolean(array[index] ) ==="true"){
    console.log(array[index])
    }
    })
    }
    我写的函数及运行结果:

    image.png

    存在问题:
    1、没有封装,没定义函数predicate,不具有通用性
    2、执行map以后函数变成了真假值,输不出原数组的值
    3、array输出3遍,第3遍才是正确的值
    老师写的代码:
    function find (list ,predicate){
    let results = []
    for(var index = 0;index<list.length;index++){
    if(predicate(list[index],index,list)) //如果为真,调用函数
    results.push(list[index]);
    }
    return results
    }
    或者,通过forEach遍历
    function full (list,predicate){
    let result = []
    list.forEach(function(element,index,list){
    if(predicate(element))
    result.push(element)
    })
    return result;
    }
    full([2,4,6,8,9],function(num){
    return num %2 == 0;})
    二、实现一个flatten函数,将一个嵌套多层的数组array(数组)(嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况。EX:flatten:([1,[2],[3,[[4]]]]) => [1,2,3,4]
    我写的代码:
    function flatten(array){
    var array = [1,[2]]
    for(let index=0;index<array[index].length;index++){
    while(Array.isArray(array[index]))
    console.log(array[index])
    }
    }
    问题1、 console.log并没有东西输出,很奇怪
    2、把多层数组层层拆开并没有思路,想着用join但是这个明显不对
    老师的代码:
    方法1、
    function flatten(arr){
    var newArr = [ ]
    function _flat(arr){
    arr.forEach(val =>{
    if (Array.isArray(val)){
    _flat(val)//精华之笔,如果是array,继续执行该函数
    }else{
    newArr.push(val)
    }
    })
    }
    _flat(arr)
    return newArr
    }
    方法2、
    function flatten(arr){
    return
    arr.reduce(function(initArr,currentArr){
    return initArr.concat(Array.isArray(currentArr)?flatten(currentArr):currentArr)
    },[ ])
    }
    三、纯CSS实现,点击按钮显示一个modal,再点击关闭按钮,关闭modal。
    答案链接:http://js.jirengu.com/wufitugoqo/1/edit
    答案解析:巧妙地运用了label和checkbox的属性,默认checkbox及一个固定定位的全屏div隐藏,当点击时,checkbox被选中,div显示,关闭和打开按钮同时绑定在check上面,所以点关闭checkbox未被选中

    相关文章

      网友评论

          本文标题:专题十、每日一题(编程题)

          本文链接:https://www.haomeiwen.com/subject/lueajxtx.html