设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Javascript面试的完美指南(开发者视角)(6)

发布时间:2019-02-21 20:11 所属栏目:21 来源:前端小智
导读:map 函数在 JavaScript 数组中可用,使用这个函数,我们可以通过对数组中的每个元素应用一个转换函数来获得一个新的数组。map 一般语法是: arr.map((elem){ process(elem) returnprocessedValue })//returnsnewarray

map 函数在 JavaScript 数组中可用,使用这个函数,我们可以通过对数组中的每个元素应用一个转换函数来获得一个新的数组。map 一般语法是:

  1. arr.map((elem){ 
  2.     process(elem) 
  3.     return processedValue 
  4. }) // returns new array with each element processed  

假设,在我们最近使用的串行密钥中输入了一些不需要的字符,需要移除它们。此时可以使用 map 来执行相同的操作并获取结果数组,而不是通过迭代和查找来删除字符。

  1. var data = ["2345-34r", "2e345-211", "543-67i4", "346-598"];  
  2. var re = /[a-z A-Z]/;  
  3. var cleanedData = data.map((elem) => {return elem.replace(re, "")});  
  4. console.log(cleanedData); // ["2345-34", "2345-211", "543-674", "346-598"]  

map 接受一个作为参数的函数, 此函数接受一个来自数组的参数。我们需要返回一个处理过的元素, 并应用于数组中的所有元素。

reduce

reduce 函数将一个给定的列表整理成一个最终的结果。通过迭代数组执行相同的操作, 并保存中间结果到一个变量中。这里是一个更简洁的方式进行处理。js 的 reduce 一般使用语法如下:

  1. arr.reduce((accumulator, 
  2.            currentValue, 
  3.            currentIndex) => { 
  4.            process(accumulator, currentValue) 
  5.            return intermediateValue/finalValue 
  6. }, initialAccumulatorValue) // returns reduced value  

accumulator 存储中间值和最终值。currentIndex、currentValue分别是数组中元素的 index 和 value。initialAccumulatorValue 是 accumulator 初始值。

reduce 的一个实际应用是将一个数组扁平化, 将内部数组转化为单个数组, 如下:

  1. var arr = [[1, 2], [3, 4], [5, 6]];  
  2. var flattenedArray = [1, 2, 3, 4, 5, 6];  

我们可以通过正常的迭代来实现这一点,但是使用 reduce,代码会更加简洁。

  1. var flattenedArray = arr.reduce((accumulator, currentValue) => { 
  2.     return accumulator.concat(currentValue); 
  3. }, []); // returns [1, 2, 3, 4, 5, 6]  

filter

filter 与 map 更为接近, 对数组的每个元素进行操作并返回另外一个数组(不同于 reduce 返回的值)。过滤后的数组可能比原数组长度更短,因为通过过滤条件,排除了一些我们不需要的。

filter 语法如下:

  1. arr.filter((elem) => {  
  2. return true/false  
  3. })  

elem 是数组中的元素, 通过 true/false 表示过滤元素保存/排除。假设, 我们过滤出以 t 开始以 r 结束的元素:

  1. var words = ["tiger", "toast", "boat", "tumor", "track", "bridge"] 
  2. var newData = words.filter((str) => { 
  3.     return str.startsWith('t') && str.endsWith('r'); 
  4. }) 
  5. newData // (2) ["tiger", "tumor"]  

当有人问起JavaScript的函数编程方面时,这三个函数应该信手拈来。 如你所见,原始数组在所有三种情况下都没有改变,这证明了这些函数的纯度。

10) 理解错误处理模式

这是许多开发人员最不关心的 JavaScript。 我看到很少有开发人员谈论错误处理, 一个好的开发方法总是谨慎地将 JS 代码封装装在 try/catch 块周围。

在 JavaScript中,只要我们随意编写代码,就可能会失败,如果所示:

  1. $("button").click(function(){ 
  2.     $.ajax({url: "user.json", success: function(result){ 
  3.         updateUI(result["posts"]); 
  4.     }}); 
  5. });  

这里,我们陷入了一个陷阱,,我们说 result 总是 JSON 对象。但有时服务器会崩溃,返回的是 null 而不是 result。在这种情况下,null["posts"] 将抛出一个错误。正确的处理方式可能是这样的:

  1. $("button").click(function(){ 
  2.     $.ajax({url: "user.json", success: function(result){ 
  3.      
  4.       try {      
  5.         updateUI(result["posts"]); 
  6.        } 
  7.       catch(e) { 
  8.         // Custom functions 
  9.         logError(); 
  10.         flashInfoMessage();       
  11.       } 
  12.     }}); 
  13. });  

logError 函数用于向服务器报告错误。flashInfoMessage 是显示用户友好的消息,如“当前不可用的服务”等。

Nicholas 说,当你觉得有什么意想不到的事情将要发生时,手动抛出错误。区分致命错误和非致命错误。以上错误与后端服务器宕机有关,这是致命的。在那里,应该通知客户由于某种原因服务中断了。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读