map(Number) 在这里做什么?

新手上路,请多包涵
var strArr = ["[1,2,3,4]","[1,2,3,4"]];
var arr1 = strArr[0].match(/\d+/g).map(Number);

我知道 map() 方法创建了一个新数组,其结果是对调用数组中的每个元素调用提供的函数。这里 Number 是一个包装对象,我无法理解发生了什么。

我的理解是,如果我控制日志删除 map 方法,我得到一个字符串数组,而包括 map 方法我得到一个数字数组。我想知道 map 如何能够获取每个字符串并转换为数字。

原文由 Sai 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答
var arr1 = strArr[0].match(/\d+/g).map(Number);

相当于

var arr1 = strArr[0].match(/\d+/g).map((str, ind, arr) => Number(str, ind, arr));

Number 尽管传递了额外的参数仍然有效的原因是因为它忽略了除第一个参数之外的所有内容。你不能指望每个函数都有相应的行为,因为并非所有函数都会忽略除第一个参数之外的所有内容,但在这种情况下它是一个方便的快捷方式。另一个很好的例子是将 truthy 和 falsy 值转换为布尔值:

 var arrBool = arrAny.map(Boolean);

原文由 Patrick Roberts 发布,翻译遵循 CC BY-SA 3.0 许可协议

strArr[0] //selects the first string. "[1,2,3,4]"

.match(/\d+/g)  // give an array of all continuos strings of digits. ['1','2','3','4']

.map(Number)  // Calls Number on each value in the array (casting it to a number)
              // and returns the array of results. [1,2,3,4]
              //
              // Keep in mind Number(val) attempts to create a Number from
              // what ever is passed to it. If it is a string itll
              // try to convert the string to a numerical value.

这是一种解析包含数组文字的字符串的复杂方法。似乎是一种复杂的做法:

 JSON.parse(strArr[0])

但是没有更多的上下文,我不能告诉你它的编程是否糟糕或者是否有充分的理由。

原文由 gbtimmon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题