codewars中一个优质的代码,代码功能:对给定的字符串排序。字符串中的每个单词都包含一个数字。这个数字是单词在结果中的位置。
输入--> 输出样例:
"is2 Thi1s T4est 3a" --> "Thi1s is2 3a T4est"
"4of Fo1r pe6ople g3ood th5e the2" --> "Fo1r the2 g3ood 4of th5e pe6ople"
function order(words){
return words.split(' ').sort(function(a, b){
return a.match(/\d/) - b.match(/\d/);
}).join(' ');
}
请问下,a.match(/d/)返回的是一个数组,类似:["4", index: 0, input: "4a", groups: undefined] 这样,为什么 a.match(/d/) - b.match(/d/)可以相减?请问下这里的两个数组相减是如何执行的?
在处理操作符时,程序会做隐式的类型转换。
match得到的数组,本质上元素的个数=1,所以你可以理解成是一位数组的加减,
["5"] - ["4"]
,接着做(隐式)类型转换,["5"].toString() - ["4"].toString()
得到"5" - "4"
,即两个字符串的操作。在
减法
操作中,程序会默认隐式转换字符串成数字,即5 - 4 = 1
在
加法
操作中,只要有非数字的,都会当成字符串拼接,即"5" + "4" = "54"