字符串及字符串方法2

237 阅读5分钟

字符串及字符串方法

es6字符串方法

/startsWith   endsWith   includes 判断字符串项是否存在
let str = "hello world"
console.log(str.startsWith("hello")) //是否以hello开头 返回布尔值
console.log(str.endsWith("d")) //是否以d结尾 返回布尔值
console.log(str.includes("o"))  //是否包含o    返回布尔值

let str = "hello"
console.log(str.repeat(2)) //hellohello 原字符串重复2次 形成新字符串返回 
/padStart padEnd  补全字符串
let str = "hello world"
console.log(str.padStart(10,"s"))//ssssshello
第一个参数 是补充字符串总共的长度 小于当前则不变 大于当前则用第二个参数的字符去补,第二个参数没有,就用空格去补 补满长度为止
/repeat()  方法返回一个新字符串,表示将原字符串重复n次。
let str = "朱雀"
let str1 = str.repeat(4) 
console.log(str1) //将原来的字符串 复制4遍

数组及数组 API

es6数组方法

filter 过滤

筛选符合要求的数组项,返回新数组 不改变原数组

let arr = [9,5,3,1,7,8,4,0]
let arr1 = arr.filter(function(a){
    if(a > 3){
        return true; // 返回的是能转化为true的就行 ,就代表把符合条件的 返回出来
    }
})
console.log(arr1) // [9, 5, 7, 8, 4]
//也可以用箭头函数表示 
let arr1 = arr.filter(a => a > 3)

为啥和上面的一样呢  如下:
let fn = function (a) {
    if(a>3){
    	return true;
    }
    //可以写成 return a > 3 
}
let fn1 = b => b > 3;  // 简单多了
console.log(fn(4)) //true
console.log(fn1(4))//true 
// 目的都是为了 满足条件就返回true  filter方法接收到之后,把满足条件的 true的 抛进新数组里面  由此达到一个筛选的目的 

for .. in

只能获取对象的键名或者索引,不能直接获取键值

/遍历数组
let arr = ["我","爱","你"]
for (let key in arr) {
    console.log(key+"=="+arr[key])
    //key ==>索引 或者 键名
}
/遍历对象
let obj = {
    name: "zhuque",
    age: 18
}
for (let key in obj) {
    console.log(key+"=="+obj[key])
     //key ==>索引 或者 键名
}
for .. of

可以直接获取值

obj对象不可被for of遍历 可以用对象的entries方法把对象转为可以枚举的键值对数组对象

let arr = ["我","爱","你"]
for (let key of arr) {
    console.log(key) // 数组项 
}
//数组求和
arr = [1,2,3,4]
let sum = 0
for (let key of arr) {
    sum += key
}
 console.log(sum)//10
// Object.entries(obj) 
indexOf

返回数组项对应的第一次出现的索引值 //两个参数时同字符串

let arr = ["我","爱","你","我","爱","你"]
console.log(arr.indexOf("我"))// 0 而不是 3
如果找不到 则返回 -1 
lastIndexOf

返回数组项对应的最后出现的索引值 //两个参数时同字符串

let arr = ["我","爱","你","我","爱","你"]
console.log(arr.lastIndexOf("我"))// 3 而不是 0
如果找不到 则返回 -1 
every

限定条件并对每一项进行判断 ,全部满足条件则返回true 有一个不满足则返回false

let arr = [1,2,3,4]
let b = arr.every(function (i){
    return i > 0
})//返回一个结果 对1 2 3 4进行判断 如果都大于0 那么返回true
console.log(b); //true
some()

判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。

let arr = [1,2,3,4]
let b = arr.some(function (i){
    return i > 0
})//返回一个结果 对1 2 3 4进行判断 如果其中有一个大于0 那么返回true
console.log(b); //true
reduce()

第一个参数 : 一个回调函数 回调函数接收四个参数 1.迭代累加器 2.数组项 3.索引 4.原数组

第二个参数:可选 迭代初始值

let arr = [2, 3, 4]
console.log(arr.reduce((total, a, b, c) => total + a, "")) // 字符拼接


统计 字符出现次数
let str = "dgalkighdaldbajkldba"
str1.split("").reduce((a,b)=>(a[b]?a[b]++:a[b]=1,a),{}) 
扩展运算符 . . .

可以理解为 把数组项一个一个拿出来

将 ... 后面的参数拆分开来,或者赋值.接收参数时,...需要放置参数最后

// 复制数组最简单新方式  不改变原数组
arr = [1,2,3,4]
//let arr1 = arr.map(value => value) //1种
//let arr1 = arr.slice(0) //2种
//let arr1 = arr.splice() //不行 改变原数组
//let arr1 = arr.concat() 3种
let arr1 = [...arr]
console.log(arr,arr1)

主要用在接收参数 解决参数不规定的问题

// 整合成 数组 再从数组里 一个一个拿数据
function add(...value){
    let sum = 0
    for(let key of value){
        sum += key
    }
    console.log(value)
}
add(1,2,3,4,5,6,7)

如果参数要从数组中拿数据的话
let arr = [1,2,3,4,5,6,7,8]
add(...arr)

代替concat 的操作 concat会返回新数组 不修改原数组

//修改原数组 
let arr = [1,2,3]
let arr1 = ["我","爱","你"]
arr.push(...arr1)

拆分字符串

console.log([..."666"]) //["6","6',"6"]

类数组转为数组

let box = document.getElementsBClassName("box")
let arrBox = [...box]
//简化写法
let box = [...document.getElementsBClassName("box")]
find

找到符合条件的第一个数组项 接收一个回调函数参数

回调函数内可以接收三个参数

第一个是 数组项

第二个是index

第三个是原数组

let arr = [1,2,3,"我","爱","你"]
let best = arr.find(function(x){
    return x === "我"
    })
console.log(best) // 我

let best1 = arr.find(function(value,index,arr){
    return index > 0
    })
console.log(best1) // 2
findIndex

用法和find类似,返回第一个符合条件的索引值 不符合就返回 -1

一样可接收三个参数

let arr = [1,2,3,"我","爱","你"]
let best = arr.findIndex(function(x){
    return x > 2
})
console.loh(best) //返回索引值 2 对应数组项 3

Array.isArray( arr )

判断接收的对象是不是一个数组 是返回true 否返回false

  • fill () 第一个 填充值 第二个参数 和第三个参数 起始索引范围 返回一个新数组

  • entries 返回一个包含索引和值的 Array Iterator 对象 (后面讲)

  • keys 返回包含每个索引键的`Array Iterator

  • values 返回包含每个值的`Array Iterator

  • includes 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。

    var arr = [1, 2, 3];
    console.log(arr.includes(2)); //返回true
    
数组去重
let arr = [ 'zhuque','abc','alice','abc','tony','abc','jenny','top','yifang','qinglong','abc' ,"zhuque"];
for(let i = arr.length-1, i >= 0, i--){
    //提出最后一项,挨着跟数组里面每一项进行比较;一旦有相同的项时,直接切除;
    for(let j = i - 1; j >= 0;j--){
        //j不用跟后面的项作比较,不管是哪一项,只要跟前面的一项进行比较;所以j = i - 1;
        if(arr[i]===arr[j]){//如果相同的话,删除哪个都行。
            arr.splice(i, 1) 
        }
    }
}