数组常用的方法
## 工厂函数
```js
//手动书写,费时费力
var obj1 = { uname: "张三", age: 21 }
var obj2 = { uname: "李四", age: 23 }
var obj3 = { uname: "王五", age: 12 }
var obj4 = { uname: "赵六", age: 32 }
//工厂函数
function demo(uname, age) {
var obj = new Object()
obj.uname = uname;
obj.age = age
return obj;
}
console.log(demo("张三", 21))
console.log(demo("李四", 23))
console.log(demo("王五", 12))
console.log(demo("赵六", 32))
//构造函数:没有返回值
function demo(uname, age) {
this.uname=uname;
this.age=age
}
var result = new demo("张三", 21)
console.log(result)
```
## 浅拷贝与深拷贝
## 闭包
闭包就是 **能够读取其他函数内部变量的函数**
### 案例
- 列表点击案例
- 打车
## 字符串常用方法
- length
- charAt charCodeAt
- indexOf lastIndexOf includes search
- concat trim
- split
- substr( start , **length** ) substring( start , **end**) slice(start , end) replace
- toLowerCase toUpperCase
- parseInt(100abc) parseFloat
- repeat
## 数组常用方法
- concat join
- shift unshift pop push 改变原数组
- sort reverse
- slice splice 第二个参数不一样
- indexOf lastIndexOf includes
- find findIndex
- forEach map filter
- some every
- reduce
// var str1 = "北京"
// var str2 = "欢迎你";
// console.log(str1.concat(str2)) //字符串拼接
/*****元素操作*****/
// var city1 = ["北京", "上海", "广州", "深圳"]
// city1.push("郑州")
// console.log(city1)
// city1.pop()
// console.log(city1)
// city1.unshift("郑州")
// console.log(city1)
// city1.shift()
// console.log(city1)
/**数组排序**/
// var arr = [23, 45, 12, 56, 39]
// arr.sort((a, b) => {
// // console.log(a, b, "****")
// // return a - b
// return b - a
// })
// console.log(arr)
/**翻转数组**/
// var arr = ["北京", "上海", "广州", "深圳"]
// console.log(arr.reverse())
// console.log(arr)
/**数组元素的截取和替换**/
// var arr = ["北京", "上海", "广州", "深圳"]
// // var result = arr.slice(1,2) //截取: 第2个参数是下标
// var result = arr.splice(1, 1, "杭州") //替换:第2个参数是length
// // console.log(result)
// console.log(arr)
/****数组下标相关的函数******/
// var person = ["唐僧", "八戒", "悟空", "八戒", "沙僧", "八戒"]
// console.log(person.indexOf("八戒"))
// console.log(person.lastIndexOf("八戒"))
/**包含**/
// console.log(person.includes("白龙马"))
// var result = person.find((item) => {
// return item == "八戒"
// })
// console.log(result)
/**数组循环**/
var arr = [
{ id: 1001, name: "八戒", weight: 200 },
{ id: 1002, name: "悟空", weight: 120 },
{ id: 1003, name: "唐僧", weight: 80 },
{ id: 1004, name: "沙僧", weight: 160 },
]
// arr.forEach((item, index) => {
// // item.weight = 100 //修改item中已经存在的属性weight
// item.age = 200 //为item中添加新属性
// })
// console.log(arr)
/***for循环遍历数组***/
// for (var i = 0; i < arr.length; i++) {
// // console.log(i)
// console.log(arr[i])
// }
/****使用in关键字遍历数组:每一项是下标*******/
// for (var k in arr) {
// // console.log(k)
// console.log(arr[k])
// }
、 改变原数组的方法 (常用)
push : 尾部追加 (向数组的尾部添加一个或多个元素,返回值是数组的长度)
unshift : 头部添加 (向数组的头部添加一个或多个元素,并返回数组长度)
pop : 尾部删除 (删除数组最后一个元素)
shift : 头部删除 (删除数组第一个元素)
sort: : 排序 (对数组元素进行排序)
join : 分隔 (将数组的每一项通过自己指定的字符进行拼接、默认连接为 ",")
reverse : 反转 (将数组进行倒序)
splice :删除元素或者添加元素,如:splice('从哪里','删几位','添加的元素')
二、其他数组方法(常用)
(1)对数组进行遍历
map(): 该方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值、原数组不变
forEach(): 用于循环调用数组中的每个元素,并将元素传回给回调函数、原数组不变
every(): 对数组中每一项进行判断,若每一项都返回true、则返回true,有一个为false,则返回false,并停止遍历,原数组不变
some(): 对数组每一项进行判断,如果有一个元素满足条件,则返回true , 并停止遍历,如果没有满足条件的元素,则返回false,原数组不变
(2)查找数组中元素
filter(): 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素、原数组不变
find(): 当数组中的元素在测试条件时返回 true 时, 返回符合条件的元素,之后的值不会再调用执行函数,如果没有符合条件的元素返回 undefined、原数组不变
findIndex(): 当数组中的元素返回 true 时, 该方法会返回符合条件的元素的索引位置,之后的值不会再调用执行函数,如果没有符合条件的元素返回 -1、原数组不变
(3)
slice : 当有两个参数 如 slice('起始位置的下标','到哪里结束') 如果只有一个参数 返回的是从该指定位置到数组末尾的所有项,不改变原数组
/********使用of遍历数组:循环出的是数组的每一项**********/
// for (i of arr) {
// console.log(i)
// }
/****使用in可以遍历对象********/
var obj = { uname: "张三", age: 21 }
// for (var k in obj) {
// // console.log(k)
// console.log(obj[k])
// }
// for (var i of obj) {
// console.log(i)
// }
// 区间 [12,45) (12,45]
// var city2 = ["郑州", "杭州"]
// ["北京", "上海", "广州", "深圳", "郑州"]
// city1.push(...city2)
// console.log(city1)
// console.log(city1.concat(city2))
//字符串和数组相互转换
// var str = "北京 上海 广州 深圳"
// var arr = str.split(" ") //字符串转数组
// var newStr = arr.join("-") //数组转字符串
// console.log(newStr)
// console.log(arr)
/*******截取字符串*******/
// var str = "北京欢迎你"
// var result = str.substr(2, 2) //第二个参数是length
// console.log(result)
// var result = str.substring(2, 4) //第二个参数是下标 [start,end) 左闭右开区间
// console.log(result)
//替换 replace
// var str="北京非常欢迎你"
// var result=str.replace("非常","十分")
// console.log(result)
水仙花
function fun() {
for (var i = 100; i < 1000; i++) {
//分别取百位、十位和个位的数字
var sum = parseInt(i / 100) ** 3 + parseInt(i / 10 % 10) ** 3 + parseInt(i % 10) ** 3
if (sum == i) {
console.log(i)
}
}
}
fun()
/******引用数据类型**********/
// var obj1 = { uname: "张三" }
// var obj2 = obj1; //{uname:"张三"}
// obj2.uname="李四" //{uname:"李四"}
// console.log(obj1)
/*****简单数据类型********/
// var str1 = "北京"
// var str2 = str1; //"北京"
// str2 = "上海"
// console.log(str1)
var obj1 = {
uname: "张三",
age: 21,
}
//
var obj2 = {}
for (var k in obj1) {
obj2[k] = obj1[k]
}
// console.log(obj2)
obj2.uname="李四"
console.log(obj1)
字符串的获取方法
- length() : 获取字符串当中含有的字符个数,拿到字符串长度
- cancat(String str) :将新的字符串拼接到当前字符串后面,获得新的字符串
- chatAt(int index) : 获取指定索引位置的单个字符(索引从0开始)
- indexOf(String str) : 查找参数字符串在本字符串当中首次出现的索引位置,如果没有则返回 - 1 (索引从0开始)
四、字符串的截取方法
- substring(int index):截取从参数位置(包含该参数)一直到字符串末尾,返回新的字符串(索引也是从0开始)
- substring(int begin,int end):截取从begin开始,一直到end结束中间的字符串([begin,end):左闭右开)
五、字符串的转换方法
- toCharArray() :将当前字符串拆分成为字符数组作为返回值
- getBytes():获得当前字符串底层的字节数组(如:a对应97,b对应98)
- replace(CharSqquence oldString,CharSequence newString):将所有出现的字符串替换成新的字符串,返回替换之后的新字符串(这条可以用于脏话过滤)
六、字符串的分割方法
- split(String regex):按照参数的规则,将字符串切分成若干部分
注意:
-
- split方法的参数是一个“正则表达式”,regex:regular expersion
- 如果按照英文句点"."进行切分,则不成功。必须写成“\\ .”才能成功切分