前端每日一题

小谷之后每天会发布一道常见的笔试面试题,偶尔也会加一些有意思的题目,小伙伴们一边学习一边来检测下自己的学习成果吧~
每天在QQ班级群、“饥人谷前端”微信公众号和本主题同步更新哦~

如何查看答案?

  • 官方答案:关注“饥人谷前端”微信公众号,每天下午18:00之后,进入公众号回复本期题目编号,如:170830,即可查看对应题目的答案哟~
  • 同学答案:每天选择部分谷内同学的答案发布在本主题下。

题号:171027

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是第一个重复的数字2。

题号:171026

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变

ex:

var array = [2,5,6,4,9,8,4,2];

reOrderArray(array);

console.log(array);//[5, 9, 2, 6, 4, 8, 4, 2]


题号:171025

输入一个链表,输出该链表中倒数第k个结点。

题号:171024

我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

题号:171023

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

编号171020

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

编号171019

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。(n<=39,且n以1开始,不是以0开始的,如1代表斐波那契数列第一项。)

ex:

fibonacci(1);//0
fibonacci(2);//1
fibonacci(3);//1
fibonacci(4);//2
fibonacci(5);//3

编号171018

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

ex:

var array=[6501,6828,6963,7036,7422,7674,8146,8468,8704,8717,9170,9359,9719,9895,
           9896,9913,9962,154,293,334,492,1323,1479,1539,1727,1870,1943,2383,2392,
           2996,3282,3812,3903,4465,4605,4665,4772,4828,5142,5437,5448,5668,5706,
           5725,6300,6335];
minNumberInRotateArray(array)//152

编号171017

创建一个函数,实现链表的push(链表尾追加一个node)和pop(链表尾删除一个node),具有pop和push方法的链表,一般称之为堆栈,特点是先进后出。

ex:

//function LinkNode(val){
//  this.val = val;
//  this.next = null;
//}
var head  //这边head是一个链表,值为(1)->(2)->(3)->(4)->(5)->(6);
//node=>val=7
pop(head)//head=>(1)->(2)->(3)->(4)->(5);
push(head,node)//head=>(1)->(2)->(3)->(4)->(5)->(7)

编号171016

创建一个函数,输入一个链表,输出一个数组,数组中的值是链表中的值的逆序输出。
计算机中以1对1方式存数据结构分两种:1.数组 2.链表,如果数据写入和删除操作十分频繁,链表结构优于数组。链表的解释如下:

链表由多个不连续的,独立的节点(LinkNode)链接起来,构成的线性结构。每个节点中最少存在两个属性,一个属性(val)用于保存该节点需要的数据,另一个属性(next),确切说是引用(指针),用于找到下一个节点。
ex:

编号171013

实现一个函数,给定一个数组,返回一个数组内部内容随机打乱的新数组。
ex:

编号171012

实现一个LazyMan,可以按照以下方式调用:

编号171011

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
ex:

编号171010

实现有一个groupBy函数,把一个集合分组为多个集合,通过 iterator 返回的结果进行分组。
ex:

编号171009

实现一个range函数,range([start], stop, [step]),一个用来创建整数灵活编号的列表的函数,便于each 和 map循环。如果省略start则默认为 0;step 默认为 1.返回一个从start 到stop的整数的列表,用step来增加 (或减少)独占。值得注意的是,如果stop值在start前面(也就是stop值小于start值),那么值域会被认为是零长度,而不是负增长。如果你要一个负数的值域 ,请使用负数step.
ex:

编号170930

利用reduce实现一个main函数,输入一个数组,输出的一个数组,要求如下:
ex:

编号170929

创建一个before函数,调用不超过count 次。 当count已经达到时,最后一个函数调用的结果将被记住并返回。
ex:

编号170928

创建一个compose函数,返回函数集 functions 组合后的复合函数, 也就是一个函数执行完之后把返回的结果再作为参数赋给下一个函数来执行. 以此类推. 在数学里, 把函数 f(), g(), 和 h() 组合起来可以得到复合函数 f(g(h()))。
ex:

编号170927

创建一个after函数, 只有在运行了 count 次之后才有效果. 在处理同组异步请求返回结果时, 如果你要确保同组里所有异步请求完成之后才 执行这个函数, 这将非常有用。
ex:

编号170926

实现一个throttle函数,throttle(function, wait, [options]),创建并返回一个像节流阀一样的函数,当重复调用函数的时候,至少每隔 wait毫秒调用一次该函数。对于想控制一些触发频率较高的事件有帮助。
ex:

编号170925

实现一个debounce函数,debounce(function, wait, [immed返回 function 函数的防反跳版本, 将延迟函数的执行(真正的执行)在函数最后一次调用时刻的 wait 毫秒之后. 对于必须在一些输入(多是一些用户操作)停止到达之后执行的行为有帮助。 例如: 渲染一个Markdown格式的评论预览, 当窗口停止改变大小之后重新计算布局, 等等])
ex:

编号170922

实现一个sortBy(list, iteratee),返回一个排序后的list拷贝副本。如果传递iteratee参数,iteratee将作为list中每个值的排序依据。迭代器也可以是字符串的属性的名称进行排序的(比如 length)。
ex:

编号170921


把如上格式的字符串转换成如下 JSON 对象

编号170920

使用 localStorage封装一个 Storage 对象,达到如下效果:

编号170919

实现一个函数,能够枚举出数组中元素的所有可能的组合。
ex:

编号170918

有两个从小到大已经排序完成的数组,长度分别是n和m,单个数组的不存在重复元素,问如何在m+n次操作下,完成去重,得到一个完整的非重数组。
ex:

编号170915

把冒泡排序(排序结果为从大到小排序)从迭代改写成递归的方式。
迭代的冒泡排序代码如下:

编号170914

实现一个create函数,效果如下:

编号170913

实现一个函数,将浮点数点左边的数每三位添加一个逗号。

编号170912

实现一个bind函数,模拟原生的bind操作符。
ex:

编号170911

实现一个create函数,模拟原生的new操作符。
ex:

编号170908

实现一个parseQuery函数,能够解析location的search字符串(不包括’?’)。
输入一个search,输出一个object,同名参数则是会成为数组。
ex:

编号170907

实现一个invoke函数,invoke(list, methodName, *arguments)
在list的每个元素上执行methodName方法。 任何传递给invoke的额外参数,invoke都会在调用methodName方法的时候传递给它。
ex:

编号170905

实现一个filter函数,模拟原生的filter函数,filter(list, predicate)。
遍历list中的每个值,返回所有通过predicate真值检测的元素所组成的数组。
ex:

编号170904

实现一个find函数,模拟原生的find函数,find(list, predicate)。

在list中逐项查找,返回第一个通过predicate迭代函数真值检测的元素值,如果没有元素通过检测则返回 undefined。 如果找到匹配的元素,函数将立即返回,不会遍历整个list。

ex:

编号170903

编号170902

用CSS实现以下效果:

编号170901

实现一个reduce函数,作用和原生的reduce类似。
reduce(list, iteratee, [memo]),memo是reduce函数的初始值,会被每一次成功调用iteratee函数的返回值所取代 。这个迭代传递4个参数:memo,value 和 迭代的index和最后一个引用的整个 list。如果没有memo传递给reduce的初始调用,iteratee不会被列表中的第一个元素调用。第一个元素将取代memo参数传递给列表中下一个元素调用的iteratee函数。
Ex:var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);
=> 6

编号170831

纯CSS实现,点击按钮显示一个modal,再点击关闭按钮,关闭modal。示例:

同学答案
答案一:http://jsbin.com/vokiteposa/2/edit?html,css,output
答案二:

答案三:http://jsbin.com/rudunavara/edit?html,output

编号170830

实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况。Ex: flatten([1, [2], [3, [[4]]]]) => [1, 2, 3, 4];

同学答案
答案一:

答案二:

答案三:

官方答案
关注“饥人谷前端”微信公众号,每天下午18:00之后,进入公众号回复本期题目编号170830,即可查看对应题目的答案哟~

发表评论

电子邮件地址不会被公开。