前端牛客网刷题-入门

FED3: dom 节点查找

查找两个节点的最近的一个共同父节点,可以包括节点自身
> oNode1.parentNode
oNode1.contains(oNode2)
查找其中一个结点的父节点,循环判断另一个结点在不在这个结点中

function commonParentNode(oNode1, oNode2) {
    for (; oNode1;oNode1=oNode1.parentNode){
        if (oNode1.contains(oNode2)){
            return oNode1
        }
    }
}

FED4: 根据包名,在指定空间中创建对象

根据包名,在指定空间中创建对象
输入描述:
namespace({a: {test: 1, b: 2}}, ‘a.b.c.d’)
输出描述:
{a: {test: 1, b: {c: {d: {}}}}}
hasOwnProperty方法的使用
深拷贝和浅拷贝
split() 方法用于把一个字符串分割成字符串数组

function namespace(oNamespace, sPackage) {
    var package=sPackage.split('.')
    var newname=oNamespace  // 保留对原始对象的引用
    for (var i=0;i<package.length;i++){
        if(!newname.hasOwnProperty(package[i])){  // 空间名不在对象中,建立此空间名属性,赋值为空
            newname[package[i]]={}
            newname=newname[package[i]]  // 将指针指向下一个空间名属性
        }
    }
    return oNamespace
}

FED6 斐波那契数列

用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等

function fibonacci(n) {
    var a=1
    var b=1
    for(var i=1;i<n;i++){
       b=a+b
       a=b-a
    }
    return a
}

FED12 字符串字符统计

统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率

  1. 不限制 key 的顺序
  2. 输入的字符串参数不会为空
  3. 忽略空白字符
function count(str) {
    var obj={}
    for (var i=0;i<str.length;i++){
        if (str[i]!=' '){
            !obj[str[i]]?obj[str[i]]=1:obj[str[i]]+=1
        }
    }
    return obj
}

JS中访问对象的两种方式区别
可以使用下面两种方式访问对象的属性和方法
1.对象名.属性名    对象名.方法名()
2.对象名[“属性名”]   对象名"方法名"

  • 对于已经存在的属性和方法,用.和用[]得到的结果一致、
  • 对于不存在(未定义)的属性和方法,用.会创建这个新的属性或方法,而用[]的方式访问不会创建新的属性或方法

FED17 数组求和

计算给定数组 arr 中所有元素的总和
reduce函数对数组中所有内容进行汇总
reduce(function(a,b,c,d) , 0); reduce 有两个参数 一个回调函数,一个参数, 当参数存在时, 即为a 的初始值, 之后a为回调返回的值, b为数组当前的元素, c为当前元素序号值, d为调用reduce的数组。

function sum(arr) {
    return arr.reduce((pre,n)=>pre+n,0)
}

FED21 删除数组最后一个元素

删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
filter函数过滤

function truncate(arr) {
    return arr.filter((n,i)=>i!=arr.length-1)
}

FED22 添加元素

在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
push在数组后面插入元素
unshift在数组前面插入元素
splice在数组指定位置插入元素

function prepend(arr, item) {
    var arrs=arr.slice(0)
    arrs.unshift(item)
    return arrs
}

FED23 删除数组第一个元素

删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组

function curtail(arr) {
    return arr.slice(1)  //切片
}

FED24 数组合并

合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

function concat(arr1, arr2) {
    return arr1.concat(arr2)
}

FED26 计数

统计数组 arr 中值等于 item 的元素出现的次数
输入: [1, 2, 4, 4, 3, 4, 3], 4
输出: 3

function count(arr, item) {
    return arr.filter(n=>n==item).length
}

FED28 求二次方

为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
输入:[1, 2, 3, 4]
输出:[1, 4, 9, 16]

function square(arr) {
    return arr.map(n=>n*n)
}

FED29 查找元素位置

在数组 arr 中,查找值与 item 相等的元素出现的所有位置
输入:[‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘a’,‘b’,‘c’] ‘a’
输出:[0, 6]

function findAllOccurrences(arr, target) {
    var res=[]
    for (var i=0;i<arr.length;i++){
        if(arr[i]==target){
            res.push(i)
        }
    }
    return res
}

FED30 避免全局变量

给定的 js 代码中存在全局变量,请修复
在Javascript语言中,声明变量使用的都是关键字var,如果不使用var而直接声明变量,则该变量为全局变量。

FED32 正确的使用 parseInt

修改 js 代码中 parseInt 的调用方式,使之通过全部测试用例
parseInt(string, radix)
radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
parseInt(num,10)

FED33 完全等同

判断 val1 和 val2 是否完全等同val1===val2

FED36 函数传参

将数组 arr 中的元素作为调用函数 fn 的参数
** call() 和 apply() 之间的区别
call() 方法分别接受参数。
apply() 方法接受数组形式的参数。
**
arr为数组fn.apply(fn,arr)

FED37 函数的上下文

将函数 fn 的执行上下文改为 obj 对象

在JavaScript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者apply的第一个参数传入即可
return fn.apply(obj)

FED40 二次封装函数

已知函数 fn 执行需要 3 个参数。请实现函数 partial,调用之后满足如下条件:
1、返回一个函数 result,该函数接受一个参数
2、执行 result(str3) ,返回的结果与 fn(str1, str2, str3) 一致

function partial(fn, str1, str2) {
    function result(str3){
        return fn.call(fn,str1, str2, str3)
    }
    return result
}

FED41 使用 arguments

函数 useArguments 可以接收 1 个及以上的参数。请实现函数 useArguments,返回所有调用参数相加后的结果。本题的测试参数全部为 Number 类型,不需考虑参数转换。
函数传参

function useArguments() {
    var sum=0
    for (var i=0;i<arguments.length;i++){
        sum+=arguments[i]
    }
    return sum
}

FED44 柯里化

已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:
1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
4、调用 c 之后,返回的结果与调用 fn 的返回值一致

5、fn 的参数依次为函数 a, b, c 的调用参数
return a=>b=>c=>a+b+c

柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。简单理解题目意思,就是指,我们将预定义的函数的参数逐一传入到curryIt中,当参数全部传入之后,就执行预定义函数。于是,我们首先要获得预定义函数的参数个数fn.length,然后声明一个空数组去存放这些参数。返回一个匿名函数接收参数并执行,当参数个数小于fn.length,则再次返回该匿名函数,继续接收参数并执行,直至参数个数等于fn.length。最后,调用apply执行预定义函数。

FED45 或运算

返回参数 a 和 b 的逻辑或运算结果return a||b

FED46 且运算

返回参数 a 和 b 的逻辑且运算结果return a&&b

FED49 二进制转换

给定二进制字符串,将其换算成对应的十进制数字
return parseInt(str,2)

FED51 乘法

求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
return parseFloat((a*b).toFixed(10))

FED52 改变上下文

将函数 fn 的执行上下文改为 obj,返回 fn 执行后的值
return fn.apply(obj)

FED53 批量改变对象的属性

给定一个构造函数 constructor,请完成 alterObjects 方法,将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量。
constructor.prototype.greeting=greeting

FED55 判断是否包含数字

正则匹配
给定字符串 str,检查其是否包含数字,包含返回 true,否则返回 false
return /[0-9]/g.test(str)

FED57 判断是否以元音字母结尾

给定字符串 str,检查其是否以元音字母结尾
1、元音字母包括 a,e,i,o,u,以及对应的大写
2、包含返回 true,否则返回 false
return /[a,e,i,o,u]$/i.test(str)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值