Javascript反序输出字符串
这是一个我在至少4次web前端笔试或者面试中遇到过的题目,就这么一行字的题目,最近一次看到却还让我如遭五雷轰顶,罪过,罪过。
解决方案一:
>'abcd ed'.split('').reverse().join('');
<-"de dcba"
如果写成:
>'abcd ed'.split('').reverse().join();
结果会是:
<"-d,e, ,d,c,b,a"
注意join(seperator)
方法是通过指定的字符连接数组所有元素,默认连接符是.
。
解决方案二:
>"abcd ed".split('').sort(function(a,b){return 1;}).join('');
<-"de dcba"
sort(sortby)
方法,如果没有sortby参数,返回数组按照字母顺序,即字符编码顺序进行排列。现在,按照sort()
方法的说明,return 1,也就是一个大于0的数,表示排序后的数组中a应该出现在b之后。
解决方案三:
>str='abcd ed';Array.prototype.map.call(str,function(it, i){return str[str.length-i-1];}).join('');
<-"de dcba"
对@yfwz100的这个方法我表示五体投地地膜拜Orz。 map()方法会给数组中的每个元素都按顺序调用一次 callback 函数。比如:
>var numbers = [1, 4, 9];
>numbers.map(function(num) { return num * 2; });
<-[2, 8, 18]
方案三使用了array.map(callback[, thisArg])
,并且,字符串被当作数组来使用…,callback中第一个参数是数组中当前被传递的元素,这里即字符串中当前被传递的字符,第二个参数是当前被传递元素的索引,第三个参数是调用map方法的数组。
例1,获取每个字符串对应的ASCLL码:
>Array.prototype.map.call("Hello World", function(x) { return x.charCodeAt(0); })
<-[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
通常情况下,map 方法中的 callback
函数只需要接受一个参数,就是正在被遍历的数组元素本身。但这并不意味着 map
只给 callback
传了一个参数,第三个参数callback会忽视,但第二个参数index
会被使用。
例2,进制数转换:
>["1", "2", "3"].map(parseInt);
<-[1, NaN, NaN]
例2中,parseInt()
方法有两个参数,element
和进制数
,于是它将index
视为了进制数。因此正确的方法应该是:
>function returnInt(element){ return parseInt(element,10); }
>["1", "2", "3"].map(returnInt);
<-[1, 2, 3]