




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于数组的前端面试题1、如何判断一个变量是否为数组?(1)为什么不用typeof?var list = 1,2,3;typeof list /objectArray继承与Object,所以typeof 会直接返回object,所以不可以用typeof方法来检测(2)为什么不用instanceof?var list = 1,2,3;list instanceof Array /trueinstanceof 表面上看确实是返回了true,但其实并不可靠。原因是Array实质是一个引用,用instanceof方法(包括下面的constructor方法)都是利用和引用地址进行比较的方法来确定的,但是在frame嵌套的情况下,每一个Array的引用地址都是不同的,比较起来结果也是不确定的,所以这种方法有其局限性。(3)为什么不用constructor方法?var list = 1,2,3;list.constructor = Array; /true原因已经解释过了,不再赘述。可靠的检测数组方式(1)利用Object的toString方法var list = 1,2,3;Ototype.toString.call(list); /object Array(2)利用ES6的Array.isArray()方法var list = 1,2,3;Array.isArray(list); /true2、数组的原生方法有哪些?一是考察面试者平时使用的是否足够平凡;二是观察面试者是否对于日常的知识有所归纳。可以用MDN中给出的方式来回答:(1)会改变自身的方法Atotype.copyWithin() 在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值。Atotype.fill() 将数组中指定区间的所有元素的值,都替换成某个固定的值。Atotype.pop()删除数组的最后一个元素,并返回这个元素。Atotype.push()在数组的末尾增加一个或多个元素,并返回数组的新长度。Atotype.reverse()颠倒数组中元素的排列顺序,即原先的第一个变为最后一个,原先的最后一个变为第一个。Atotype.shift()删除数组的第一个元素,并返回这个元素。Atotype.sort()对数组元素进行排序,并返回当前数组。Atotype.splice()在任意的位置给数组添加或删除任意个元素。Atotype.unshift()在数组的开头增加一个或多个元素,并返回数组的新长度。(2)不会改变自身的方法Atotype.concat()返回一个由当前数组和其它若干个数组或者若干个非数组值组合而成的新数组。Atotype.includes() 判断当前数组是否包含某指定的值,如果是返回 true,否则返回 false。Atotype.join()连接所有数组元素组成一个字符串。Atotype.slice()抽取当前数组中的一段元素组合成一个新数组。Atotype.toSource() 返回一个表示当前数组字面量的字符串。遮蔽了原型链上的 Ototype.toSource() 方法。Atotype.toString()返回一个由所有数组元素组合而成的字符串。遮蔽了原型链上的 Ototype.toString() 方法。Atotype.toLocaleString()返回一个由所有数组元素组合而成的本地化后的字符串。遮蔽了原型链上的 Ototype.toLocaleString() 方法。Atotype.indexOf()返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。Atotype.lastIndexOf()返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。遍历方法Atotype.forEach()为数组中的每个元素执行一次回调函数。Atotype.entries() 返回一个数组迭代器对象,该迭代器会包含所有数组元素的键值对。Atotype.every()如果数组中的每个元素都满足测试函数,则返回 true,否则返回 false。Atotype.some()如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。Atotype.filter()将所有在过滤函数中返回 true 的数组元素放进一个新数组中并返回。Atotype.find() 找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回 undefined。Atotype.findIndex() 找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回 -1。Atotype.keys() 返回一个数组迭代器对象,该迭代器会包含所有数组元素的键。Atotype.map()返回一个由回调函数的返回值组成的新数组。Atotype.reduce()从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。Atotype.reduceRight()从右到左为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。Atotype.values() 返回一个数组迭代器对象,该迭代器会包含所有数组元素的值。Atotypeiterator() 和上面的 values() 方法是同一个函数。3、如何将类数组的变量转化为数组?是如果是ES6,可以用Array.from()方法;如果不确定环境的话,可以用Atotype.slice.call()的方法,将类似数组转换为。(1) Array.from()的详解:Set类型的转换let s = new Set(foo, window); Array.from(s); / foo, windowMap类型的转换let m = new Map(1, 2, 2, 4, 4, 8);Array.from(m); / 1, 2, 2, 4, 4, 8类数组的值function f() return Array.from(arguments);f(1, 2, 3);/ 1, 2, 3Array.from()的第二个参数mapFn也很有用处,可以对于传入的类数组值进行定制化修改/ Using an arrow function as the map function to/ manipulate the elementsArray.from(1, 2, 3, x = x + x); / 2, 4, 6/ Generate a sequence of numbers/ Since the array is initialized with undefined on each position,/ the value of v below will be undefinedArray.from(length: 5, (v, i) = i);/ 0, 1, 2, 3, 44、说一说ES6对于数组的扩展增加了扩展运算符(spread).它将一个数组转化为以逗号分隔的一个参数序列。var list = 1,2,3;console.log(.list); /1 2 3增加了两个方法,Array.from()和Array.of()方法。增加了一些实例方法,如copyWithin()、entries()、keys()、values()等。5、数组去重,你能说出多少种方法?(1)利用一个空Object来实现Atotype.unique = function()var tmp = ,res=;this.forEach(function(i)!tmpi & res.push(i) & (tmpi = true);)return res;var list = 0,0,1,2,3,6,6;console.log(list.unique(); /0,1,2,3,6(2)利用ES6 的Set数据结构console.log(.new Set(list); /0,1,2,3,66、你知道Atotype的类型是什么吗?很多人都不知道,其实Atotype是一个数组,只不过length为0如何“打平”一个嵌套数组,如1,2,3,4,5 = 1,2,3,4,5?你能说出多少种方法?这个方法很多,如果你的答案是用递归的话,那确实有点low,而且代码会比较复杂。(1)利用Atotype.toString()方法var list = 1,2,3,4,5;console.log(list.toString(); /1,2,3,4,5原理:toString 方法返回一个字符串,该字符串由数组中的每个元素的 toString() 返回值经调用 join() 方法连接(由逗号隔开)组成。(2)利用Atotype.join()方法var list = 1,2,3,4,5;console.log(list.join(); /1,2,3,4,5原理:join方法会让所有的数组元素转换成字符串,再用一个分隔符将这些字符串连接起来。如果元素是undefined 或者null, 则会转化成空字符串。PS:如果你觉得上面输出的不是一个数组,可以稍微加工一下var list = 1,2,3,4,5;JSON.parse($list.toString(); /1,2,3,4,5JSON.parse($list.join(); /1,2,3,4,57、如何克隆一个数组?你能说出多少种?(1)借用concat方法var arr1 = 1,2,3;var arr2 = arr1.concat();(2)借用slice方法var arr1 = 1,2,3;var arr2 = arr1.slice(0);原理:数组本质上也是Object,直接赋值的话,只是将引用赋值给另一个变量,最终会导致被复制的变量也会随着原来的数组变化而变化。8、说一说Atotype.sort()方法的原理?(追问:不传递参数会如何?)语法sort方法接受一个“比较函数”作为参数。如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。若 a 等于 b,则返回 0。若 a 大于 b,则返回一个大于 0 的值。9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年防洪排水工程合同履约保证金管理合同
- 2025年度社保补偿协议范本编写指南与案例分享
- 2025版高压水电设备安装与调试合同书
- 2025版托管班学生托管与亲子活动策划合同
- 2025版智能制造与工业4.0咨询服务合同范本
- 2025年度旅游线路开发及代理权授权合同
- 2025版个人消费信贷授信额度调整合同
- 2025版外墙涂料施工与建筑立面美化合同范本
- 贵州省兴义市2025年上半年事业单位公开遴选试题含答案分析
- 2025版牛奶品牌跨界合作采购合同范本
- 2025年秋季开学典礼校长致辞:启步金秋话成长播梦育英向未来
- 2025科研素养考试题及答案
- 兽药销售业务培训教材
- 2025年湖北省农村义务教育学校教师公开招聘小学语文真题(附答案)
- 2025-2030中国医疗护理器械行业市场发展现状及发展趋势与投资风险研究报告
- 2025四川绵阳市医学会招聘2人笔试模拟试题及答案解析
- 测绘法规与管理课件
- 软件项目突发事件应急预案
- 湖南省安仁县2025年上半年事业单位公开招聘试题含答案分析
- 2025年潍坊市中考数学试题卷(含标准答案)
- 医保打击欺诈骗保课件
评论
0/150
提交评论