JS 字符串与数组你必须要知道的API(一)

1,626 阅读2分钟

每天4个JavaScript字符串与数组的API,帮助大家与我自己加深记忆,持续更新... ...

Array.prototype.reverse()

语法: arr.reverse()
MDN: reverse() 方法将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组

var a = [1,2,3];
var _a = a.reverse();
console.log(a); // [3,2,1]
console.log(_a); // [3,2,1]

当然自己实现reverse()方法其实也很简单:

window.Array.prototype.myReverse = function () {
    for(let i=0;i<this.length/2;i++){
        let temp = this[i];
        this[i] = this[this.length-1-i];
        this[this.length-1-i] = temp;
    }
}

Array.prototype.join()

语法:arr.join([separator])
MDN: join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个value,那么将返回该值而不使用分隔符。示例如下:

var arr = ['唱','跳','Rap','篮球'];
var arrStr1 = arr.join(); console.log(arrStr1); // "唱,跳,Rap,篮球"
var arrStr2 = arr.join(',');console.log(arrStr2); // "唱,跳,Rap,篮球"
var arrStr3 = arr.join('');console.log(arrStr3); // "唱跳Rap篮球"
var arrStr4 = arr.join(' ');console.log(arrStr4); // "唱 跳 Rap 篮球"
var arrStr5 = arr+'';console.log(arrStr5); // "唱,跳,Rap,篮球"

Array.prototype.map()

语法:去MDN自己看
MDN: map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。示例:

var arr = [1,2,3];
var arr2 = arr.map((e)=>{return e*2});console.log(arr2); // [2, 4, 6]
var arr3 = arr.map((e)=>{return e*e});console.log(arr3); //[1, 4, 9]
var arr4 = arr.map((e)=>{return e+''});console.log(arr4); // ["1", "2", "3"]

String.prototype.split()

语法:str.split([separator[, limit]])
MDN: split() 方法使用指定的分隔符字符串将一个String对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。 示例:

var str = "我是ikun,我喜欢 唱 跳 Rap和篮球";
var strArr1 = str.split();console.log(strArr1); //["我是ikun,我喜欢 唱 跳 Rap和篮球"]
var strArr2 = str.split(' ');console.log(strArr2);//["我是ikun,我喜欢", "唱", "跳", "Rap和篮球"]
var strArr3 = str.split('');console.log(strArr3);
// 如果空字符串("")被用作分隔符,则字符串会在每个字符之间分割。
//["我", "是", "i", "k", "u", "n", ",", "我", "喜", "欢", " ", "唱", " ", "跳", " ", "R", "a", "p", "和", "篮", "球"]
var strArr4 = str.split(',');console.log(strArr4);//["我是ikun", "我喜欢 唱 跳 Rap和篮球"]

反转字符串中的单词

反转字符串中的单词是Leetcode上第557号问题,具体问题描述如下:

给定一个字符串,
你需要反转字符串中每个单词的字符顺序,
同时仍保留空格和单词的初始顺序。

示例 1:

输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc" 

注意:在字符串中,每个单词由单个空格分隔,
并且字符串中不会有任何额外的空格。

这道题目使用JavaScript就可以使用上述API解出结果:

/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    return s.split(' ').map((e)=>{
        return e.split('').reverse().join('')
    }).join(' ');
};

其实仔细想一想这个解题过程并不难,思路为:

step1:
"Let's take LeetCode contest" => ["Let's","take","LeetCode","contest"]
step2:
"Let's" => ["L","e","t","'","s"]=>["s","'","e","t","L"]=> "s'teL"
step3:
["Let's","take","LeetCode","contest"] => ["s'teL","ekat","edoCteeL","tsetnoc"]
step4:
["s'teL","ekat","edoCteeL","tsetnoc"] => "s'teL ekat edoCteeL tsetnoc" 

本题目重点仍然在API的掌握上~