1.Array of
1.1 what?
Array of 是一种新的数组创建模式
1.2why? 以前创建数组会有一个问题就是
let old = [0]
old[3] = 3
console.log(old)
结果打印的是:(4) [0, empty × 2, 3],当没有赋值时,系统会默认添加两个undefined,这样容易搞混淆,所以需要一个不产生空的方式.
1.3how?
let arr = Array.of(6)
console.log(arr.length)
console.table(arr)
- Array.form
2.1 what?
一种将字符串转换成数组的方式
2.2 why?
这样方便把一个字符串里面的内容给遍历出来
2.3 how?
let str = '今天天气真不错'
console.log(typeof Array.from(str))
3.展开语法
3.1 what?
…name 把数据以字符串的形式保存
如果是参数的形式就是把实参装进一个数组内
3.2 why?
这样写起来比较简便,而且还可以使用数组的方法
3.3 how?
let arr = ['张飞', '狂铁', '夏侯', '蒙犽']
let arr2 = ['张飞1', '狂铁', '夏侯', '蒙犽']
let arr3 = ['张飞2', '狂铁', '夏侯', '蒙犽']
function show (...args) {
console.log(args[0]) //(4) ["张飞", "狂铁", "夏侯", "蒙犽"]
}
show(arr, arr2, arr3)
4.push往后添加
会对原数组进行改变
function addArray (begin, end) {
let arr = []
for(let i=begin; i<=end; i++){
arr.push(i) //加在最后面
}
return arr
}
console.table(addArray(1, 10))
5.unshift往前添加
会对原数组进行改变
let arr = [1,2,3]
arr.unshift(6,7)
console.log(arr) //[6,7,1,2,3]
6.pop从后开始删除
会对原数组进行改变
arr.pop()
console.log(arr) //[6,7,1,2]
7.shift从前开始删除
会对原数组进行改变
arr.shift()
console.log(arr) //[7,1,2]
8.slice对数组进行截取
不会对原数组产生改变
参数为起始到结束位置
console.log(arr.slice(1,3)) //[1,2]
9.splice对数组进行增删改
会对原数组产生改变
增
第一个为起始,第二个为0就是增加
arr.splice(3,0,'增','增','增') // [7, 1, 2, "增", "增", "增"]
改
第一个为起始,第二个为第一个数之后改的位置,
arr.splice(3,1,'改','改','改') //[7, 1, 2, "改", "改", "改", "增", "增"]
删
第一个为起始,第二个为删几个,是从第一个数开始删起
arr.splice(3,4) // [7, 1, 2, "增"]
查
第一个为要查的,第二个为结束位置
let num = arr.splice(2, 2) //2, "增"
9.indexof lastindexof 查找元素,返回下标(不推荐使用,用下面那个)
10.includes查找元素,返回布尔值(不推荐使用,用下面那个)
11.find
因为includes查找引用类型时可能会产生新的内存地址,所以要使用find这种类似遍历的查找,返回的是具体的对象
let arr = [{name: '张三'}, {name: '李四'}, {name: '王五'}]
let target = arr.find(function(item){
return item.name == '李四'
})
console.log(target) //{name: '李四'}
12.findIndex 和上面一样,只是返回的是下标
let arr = [{name: '张三'}, {name: '李四'}, {name: '王五'}]
let target = arr.findIndex(function(item){
return item.name == '李四'
})
console.log(target) //1
13.sort()排序
a是最大和最小的值,b是其他所有的值,原理应该是通过冒泡排序来一个一个算的
通过比较a和b的大小,一般都是a在前就是从小到大
b在前就是从大到小
let cart = [
{ name: 'iphone', price: 8000},
{ name: 'imac', price: 10000},
{ name: 'ipad', price: 5000}
]
cart = cart.sort(function(a,b){
return a.price - b.price
})
console.table(cart)
14.冒泡排序
let arr = [1,2,3,45,76,1,42,7,512,8,33,0,321]
function pao (array) {
for (const n in array){
for(const m in array){
if(array[n] < array[m]){
const value = array[n]
array[n] = array[m]
array[m] = value
}
}
}
return array
}
console.log(pao(arr))
15.forEach循环遍历
let arr = [1,2,3,45,76,1,42,7,512,8,33,0,321]
arr.forEach(function(item, index, lessons){
console.log(item)
console.log(index)
console.log(lessons)
})
16.every 检测数据
每一个都要为真才会返回真
let words = ['黄博文', '黄博文', '黄博文']
let title2 = '黄博文牛逼'
let state = words.every(function (item, index, array){
return title2.includes(item)
})
console.log(state) //true
17.some检测数据
有一个为真就返回真
<input type="text" name="title">
<span></span>
let keywords = ['张三', '李四']
let title = document.querySelector('[name="title"]')
title.addEventListener('keyup', function () {
const res = keywords.some(keyword => {
return this.value.indexOf(keyword) != -1
})
document.querySelector("span").innerHTML = res ? "" : "必须包含" + keywords.join(",") + "关键词"
})
18.filter过滤
let arr = [
{ name: '张三', age: 18, gender: '男'},
{ name: '李四', age: 28, gender: '女'},
{ name: '王五', age: 38, gender: '男'},
{ name: '赵六', age: 48, gender: '男'}
]
let res = arr.filter(function(array){
return array["gender"] == '男'
})
console.log(res)
19.手写filter原理
let arr = [1,2,3,4]
function filter (array, callback) {
let newArray = []
for (const value of array){
if(callback(value) === true){
newArray.push(value)
}
}
return newArray
}
console.log(filter(arr, function(value){
return value>1
}))
20.map复制数组
let arr = [1,2,3,4]
let newArray = arr.map(function(item, index, arr){
return item
})
console.log(newArray) //[1, 2, 3, 4]
21.reduce 可以迭代数组,并且第一个参数可以是上一次当前函数调用返回的值
let arr = [
{ name: '张三', age: 18, gender: '男'},
{ name: '李四', age: 28, gender: '女'},
{ name: '王五', age: 38, gender: '男'},
{ name: '赵六', age: 48, gender: '男'}
]
function filter (array) {
return array.reduce (function (arr, item) {
let find = arr.find(function (v) {
return v.gender === item.gender
})
if (!find) {
arr.push(item)
}
return arr
}, [])
}
console.table(filter(arr))