字符串及字符串方法
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)
}
}
}