var strArr = ["[1,2,3,4]","[1,2,3,4"]];
var arr1 = strArr[0].match(/\d+/g).map(Number);
Run Code Online (Sandbox Code Playgroud)
我知道该map()
方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。这Number
是一个包装对象,我无法理解发生了什么。
我的理解是,如果我在控制台日志中删除 map 方法,我会得到一个字符串数组,而包括 map 方法,我会得到一个数字数组。我想知道 map 如何能够获取每个字符串并转换为数字。
Pat*_*rts 14
var arr1 = strArr[0].match(/\d+/g).map(Number);
Run Code Online (Sandbox Code Playgroud)
相当于
var arr1 = strArr[0].match(/\d+/g).map((str, ind, arr) => Number(str, ind, arr));
Run Code Online (Sandbox Code Playgroud)
Number
尽管传入了额外的参数,但仍然有效的原因是它忽略了除第一个参数之外的所有内容。你不能指望每个函数都有相应的行为,因为不是所有的函数都会忽略第一个参数之外的所有东西,但在这种情况下,它是一个方便的快捷方式。另一个很好的例子是将真值和假值转换为布尔值:
var arrBool = arrAny.map(Boolean);
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
这是一种解析包含数组文字的字符串的复杂方法。似乎是一种复杂的做法:
JSON.parse(strArr[0])
Run Code Online (Sandbox Code Playgroud)
但如果没有更多的上下文,我无法告诉你它是否是糟糕的编程或者是否有充分的理由。