记一些笔试题

已知一个由ASCLL字符组成的字符串,查找第一个重复的字符

思路:每一个元素去与后面的元素去比较,只要相等就退出,说明已经找到第一个重复的字符了。
在这里插入图片描述

function getFirstSameStr (string) {
    var i = 0
    for (i; i < string.length; i++) {
        for (var j = i + 1; j < string.length; j++) {
            if (string[i] == string[j]) {
                console.log('第一个重复的字符是', string[i])
                return
            } else {
                continue
            }
        }
    }
    console.log('该字符串没有重复字符')
}

给定一个数组,数组元素只能为数字,null,undefined,NaN。求数组不重复最大子数组长度。

例如:输入[1,4,3,4,null,undefined,NaN,null] 输出 6
思路:将每一个元素全部转成字符串,避免了nullundefined的影响。null == undefinedtruenull === undefinedfalse,每个元素跟后面的元素去比较,看有没有重复的,找到重复的把后面的删除。
在这里插入图片描述

function maxSonArray (array) {
    var i = 0
    for (i; i < array.length; i++) {
        // 全部转字符串便于比较(null == undefined为true,null === undefined为false)
        array[i] = '' + array[i]
    }
    // console.log('处理后的数组', array)
    var sonArray = array
    i = 0
    for (i; i < sonArray.length; i++) {
        for (var j = i + 1; j < sonArray.length; j++) {
            if (sonArray[i] === sonArray[j]) {
                // 找到重复的就把后面重复的去掉
                sonArray.splice(j, 1)
            } else {
                continue
            }
        }
    }
    console.log('最大子数组长度', sonArray.length, '最大子数组为', sonArray)
}

将函数补充完整 transform(url){ } 实现url地址参数的动态替换

例如 let href=‘https://www.baidu.com/s?user=teml2&&wd=teml’
console.log(transform(href)({user:‘123’,wd:‘aa’,qq:‘321’}))
输出:https://www.baidu.com/s?user=123&&wd=aa

思路:先找到??后面跟的就是参数,参数用&&链接,我们就用&&分割成数组,=左右两边就是键值对,那直接用=将键值对分割成数组,将新的参数值替换原来旧的参数值,注意题目不要新的参数就要原来的参数。所以遍历原来的参数的key去接收新的参数值,新的字段就不要了。最后重新拼接字符串。
在这里插入图片描述

function transform (url, param) {
    // 找到?后面就是参数串
    var paramsindex = url.indexOf('?')
    // 截取?前面的字符串
    var urlHead = url.substr(0, paramsindex + 1)
    // 截取?后面的字符串
    var paramsStr = url.substr(paramsindex + 1)
    // 将参数串按照'&&'分割
    var paramsArray = paramsStr.split('&&')
    // 将参数数组变成键值对放进对象
    var keyValObject = {}
    paramsArray.forEach((element) => {
        let temp = element.split('=')
        keyValObject[temp[0]] = temp[1]
    });
    // 合并参数对象
    let tempKeyArray = Object.keys(keyValObject)
    tempKeyArray.forEach((element) => {
        keyValObject[element] = param[element]
    })

    // 想要把新对象的全部参数加上去可以用下一行代码
    // Object.assign(keyValObject, param)

    // 重新组合成url
    let target = ''
    let temparray = Object.entries(keyValObject)
    for (let i = 0; i < temparray.length; i++) {
        temparray[i] = temparray[i].join('=')
    }
    let parambody = temparray.join('&&')
    target = urlHead + parambody
    console.log(target)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值