常见和字符串和数组的方法
*常用字符串方法*
- toLowerCase(): 把字符串转为小写,返回新的字符串
- toUpperCase(): 把字符串转为大写,返回新的字符串
- indexOf(): 返回某个指定的子字符串在字符串中第一次出现的索引位置,如果没有查找到则返回-1
- substr(index,howmany): 返回从指定下标开始指定长度的的子字符串
- split(): 把字符串分割成字符串数组
*常用数组方法*
-
arr.reverse() 反转数组,会改变原数组,并返回反转后的新数组
-
let arr = [4, 9, 0, 10, 240, -12, 98] arr.sort(function (a, b) { return a - b }) 数组升序排列 会改变原数组,并返回反转后的新数组 arr.sort(function (a, b) { return b - a }) 数组降序排列 会改变原数组,并返回反转后的新数组
-
arr.length = 0 清空数组
-
arr.join(),将数组的每一项用指定字符连接形成一个字符串。默认连接字符为 “,” 逗号
-
let arr = ['李狗蛋', '张翠花', '赵铁柱', '王小二']
-
arr.splice(index,howmany,arr1,arr2...) ,删除元素并添加元素,从index位置开始删除howmany个元素,并将arr1、arr2...数据从index位置依次插入。howmany为0时,则不删除元素
遍历方法
-
Array.forEach(function (v, i){ }),用于调用数组的每个元素,并将元素传递给回调函数。原数组不变
-
Array.map(function (v, i){ }),原数组的每一项执行函数后,返回一个新的数组。原数组不变
-
[1,2,3,4,5,6] 将原有数组中每一项的数据加10返回新数组
-
['13','3','79','1','10','24','78','2'] 个位数补0返回新数组
-
let arr = [{
name: '李狗蛋',
age: 16,
sex: '男'
}, {
name: '张翠花',
age: 20,
sex: '女'
}, {
name: '赵铁柱',
age: 25,
sex: '男'
}, {
name: '王小二',
age: 19,
sex: '男'
}]
-
遍历数组,给所有人的age+1 返回新数组
-
Array.filter(function(v,i){}),过滤数组中,符合条件的元素并返回一个新的数组
- 去掉[13, 0, '', 90, 78, '' , ''] 的空字符串
- 去掉[13, 0, '', 90, 78, '' , ''] 的空字符串和0值
- 数组去重 [1,1,2,3,4,4,5,6,6,6,6,7,7,8,9,9,9]
案例
1.统计字符串 'abcoefoxyozzopp' 中每个字符出现的次数(字符串可以随意设置啊)
// 目标:给用户返回这种格式的数据:{a:4,b:3,c:6}
let str = 'abcoefoxyozzopp'
function getCount(str) {
// 将字符串转换为数组
let arr = str.split('')
// 声明一个空对象存储各个字符出现的次数
let obj = {}
// 对数组进行遍历 v 代表当前遍历项
arr.forEach(v => {
// obj[v] 相当于 obj.a 判断如果对象中有指定字符的属性名则在当前数量上加一
//否则给对象创建一个新键名
if (obj[v]) {
obj[v] += 1
} else {
obj[v] = 1
}
})
return obj
}
console.log(getCount(str))
2.封装一个函数,实现功能:往函数传参为该格式字符串:'get-elements-by-class-name',得到驼峰命名法的返回值为‘getElementsByClassName’(注意:直接在函数中返回‘getElementsByClassName’字符串为0分,需要对相同格式的字符串都能生效)
let str = 'GET-elemenTs-bY-cLAss-nAMe'
function getName(str) {
// 1. 将所有的字母都转换为小写
str = str.toLowerCase()
// 2. 将-分隔的字符串转换为数组
let arr = str.split('-')
let newArr = arr.map(function (v, i) {
// 如果当前索引不为0 则找到字符串索引为0项转换大写,拼接 剩余字符串
if (i !== 0) {
return v[0].toUpperCase() + v.substr(1)
}
return v
})
// 再将数组转换为字符串
let newStr = newArr.join('')
return newStr
}
console.log(getName(str));
3.有一个url(字符串)如下: www.heima.com?key0=haha&key1=hello&key2=xixi ; 要求处理此url, 得到一个如下格式的对象: let obj = { key0:’haha’, key1:’hello’, key2:’xixi’ }
- ?以后浏览器地址栏传递参数的标识,?前面是地址,后面是参数,我们要处理是?后面的那一串字符串
- 第一步应该使用split创建?后面的那一串字符串 :key0=haha&key1=hello&key2=xixi
- 第二步:使用&符号对字符串进行分隔,获取到一个数组:['key0=haha', 'key1=hello', 'key2=xixi']
- 第三步:遍历数组,获取其中一个值:key0=haha,再次使用split进行分隔:split('=') : ['key0', 'haha']
- 第四步,将数组的第0个元素做为对象的键,将第一个元素做为对象的值
- 第五步:搞定
```<script>
let str = 'http://www.heima.com?key0=haha&key1=hello&key2=xixi'
function getParams(str) {
// 1. 获取 ? 第一次出现的索引值
// 20
let index = str.indexOf('?')
// 2. 获取目标字符串,截取? 后面的内容
// key0=haha&key1=hello&key2=xixi
let targetStr = str.substr(index + 1)
// 3. 根据& 拆分字符串为数组
// ['key0=haha', 'key1=hello', 'key2=xixi']
let targetArr = targetStr.split('&')
// 4. 遍历数组
let newArr = targetArr.map(function (v) {
return v.split('=')
})
// 4. 再次遍历二维数组,塞入对象
let obj = {}
newArr.forEach(function (v, i) {
obj[v[0]] = v[1]
})
return obj
}
console.log(getParams(str));
</script>