1.数组Array
let arr = [20, 8, 9, 0, 36, 0, 36, -18, 0, 100]
1.1数组元素增加
function add(element) {
let len = arr.push(element)
console.log(len)
}
1.2数组元素删除(三种算法)
function del(element) {
// 算法1
// let array = []
// for (let item of arr) {
// if (item === element) {
// continue
// }
// array.push(item)
// }
// return array
// 算法2
// let index = searchElement(element)
// if (index === -1) {
// console.log(element + '不是数组的元素,无法删除')
// return
// }
// for (let i = index; i < arr.length - 1; i++) {
// arr[i] = arr[i + 1]
// }
// arr.length--
// del(element)
// 算法3
// let index = searchElement(element)
// if (index !== -1) {
// arr.splice(index, 1)
// }
while (1) {
let index = searchElement(element)
if (index !== -1) {
arr.splice(index, 1)
} else {
break
}
}
}
1.3数组元素修改
function updateElement(oldElement, newElement) {
let flag = false
// 只修改第一次出现的元素
for (let i = 0; i < arr.length; i++) {
if (arr[i] === oldElement) {
arr[i] = newElement
flag = true
break
}
}
if (flag) {
console.log('修改成功')
} else {
console.log('修改失败')
}
}
1.4修改arr中所有oldElement元素为newElement
function updateAllElement(oldElement, newElement) {
let count = 0
// 只修改第一次出现的元素
for (let i = 0; i < arr.length; i++) {
if (arr[i] === oldElement) {
arr[i] = newElement
count++
}
}
if (count !== 0) {
console.log('成功修改' + count + '个元素' + oldElement)
} else {
console.log('修改失败')
}
}
1.5数组元素查找
function searchElement(element) {
// 元素element在arr中的下标index
let index = -1
for (let i = 0; i < arr.length; i++) {
if (arr[i] === element) {
index = i
break
}
}
return index
}
1.6数组元素反转
function reverseArray() {
// 算法1
// for (let i = 0, j = arr.length - 1; i < j; i++, j--) {
// let t = arr[i]
// arr[i] = arr[j]
// arr[j] = t
// }
// 算法2
// arr.reverse()
// 算法3
let array = []
for (let i = arr.length - 1; i >= 0; i--) {
array.push(arr[i])
}
arr = array
}
1.7数组元素拼接成字符串
function append(arr, charater) {
let str = arr.join(charater)
document.getElementsByClassName('box')[0].innerHTML = str
}
1.8数组元素排序 两次循环 外层循环n-1,内层循环n-i-1,内部循环值交换,小在前大在后
function sortUp() {
// let n = arr.length
// for (let i = 0; i < n - 1; i++) {
// for (let j = 0; j < n - i - 1; j++) {
// if (arr[j] > arr[j + 1]) {
// let t = arr[j]
// arr[j] = arr[j + 1]
// arr[j + 1] = t
// }
// }
// }
arr.sort(function (a, b) {
return a - b
})
}
function sortDown() {
// let n = arr.length
// for (let i = 0; i < n - 1; i++) {
// for (let j = 0; j < n - i - 1; j++) {
// if (arr[j] < arr[j + 1]) {
// let t = arr[j]
// arr[j] = arr[j + 1]
// arr[j + 1] = t
// }
// }
// }
arr.sort(function (a, b) {
return b - a
})
}
1.9数组元素插入
function insertElement(index, element) {
// 算法1
if (index < 0 || index > arr.length - 1) {
return
}
// arr.splice(index, 0, ...element) // 数组解构 ...element =...[200,300,400] = 200,300,400
// 算法2
arr.length++
for (let i = arr.length - 1; i > index; i--) {
arr[i] = arr[i - 1]
}
arr[index] = element
}
1.10求极值
function getMaxAndMin() {
let max = arr[0]
let min = arr[0]
for (let item of arr) {
if (item > max) {
max = item
}
if (item < min) {
min = item
}
}
return [min, max]
}
1.11数组元素去重
function removeDuplicates() {
// let array = []
// for (let item of arr) {
// // item在array中首次出现的下标,如果array不在返回-1
// if (array.indexOf(item) === -1) {
// array.push(item)
// }
// }
// return array
return [...new Set(arr)]
}
1.12遍历所有的数组原生和下标
function listArray() {
// item是元素,index下标
arr.forEach(function (item, index) {
console.log(index, item)
})
}
// add(15)
// append(arr, ',')
// del(0)
// append(arr, ',')
// updateAllElement(36, 46)
// reverseArray()
// sortUp()
// insertElement(-1, 300)
// let a = getMaxAndMin()
// let array = removeDuplicates()
// append(array, ',')
listArray()
1.13数组的常规算法:
1、添加
2、删除
3、修改
4、排序
5、反转
6、求极值
7、插入
8、去重
9、查找
10、拼接字符串
1.14数组原生的api
sort() push() splice() join() indexOf() length reverse() forEach()
1.15未提到方法api
find() findIndex() map() some() every() reduce() lastIndexOf() filter() includes()
pop() shift() unshift() slice()
2.日期
2.1创建日期对象
function fn() {
// 获得系统时间
let date = new Date()
console.log(date) // Thu Apr 28 2022 17:34:10 GMT+0800 (中国标准时间)
}
fn()
2.2获得日期对象的年月日时分秒
function fn1() {
let date = new Date()
let y = date.getFullYear() // 年
let mon = date.getMonth() + 1 // 月
let d = date.getDate() // 日
let h = date.getHours() // 时
let min = date.getMinutes() // 分
let s = date.getSeconds() // 秒
let str = [y, mon, d].join('-')
str += ' '
str += [h, min, s].join(':')
console.log(str) // 2022-4-28 17:38:7--->2022-04-28 17:38:07
}
fn1()
2.3创建指定某天的日期
function fn2() {
let date = new Date('2022-8-15 08:00:00')
console.log('今天是周', date.getDay())
}
fn2()
2.4日期的格式化
function formatDate(v) {
let date = new Date(v) // 日期不合法 date = 'Invalid Date'
if (Number.isNaN(Number(date))) {
// date = 'Invalid Date' Number(date) = NaN
date = new Date()
}
let y = (date.getFullYear() + '').padStart(4, '0') // 年
let mon = (date.getMonth() + 1 + '').padStart(2, '0') // 月
let d = (date.getDate() + '').padStart(2, '0') // 日
let h = (date.getHours() + '').padStart(2, '0') // 时
let min = (date.getMinutes() + '').padStart(2, '0') // 分
let s = (date.getSeconds() + '').padStart(2, '0') // 秒
let str = [y, mon, d].join('-')
str += ' '
str += [h, min, s].join(':')
console.log(str) //2022-04-28 17:48:00
return str
}
formatDate('hello')
3.判断数组元素出现的次数
3.1 判断a出现次数
function fn(code) {
let count = 0
let arr = ['a', 'b', 'c', 'a', 'd', 'a', 'e']
// a出现次数
// arr.forEach(function (item, index) {
// if (item === code) {
// count++
// }
// })
// for (let item of arr) {
// if (item === code) {
// count++
// }
// }
// for (let index in arr) {
// if (arr[index] === code) {
// count++
// }
// }
for (let i = 0; i < arr.length; i++) {
if (arr[i] === code) {
count++
}
}
return count
}
// let count = fn('a')
// console.log(count)
3.1使用for-in遍历对象,可以枚举的属性
function fn1() {
let stu = {
id: 1,
age: 20,
name: 'tom',
}
for (let key in stu) {
// console.log(typeof key)
console.log(key, stu[key])
}
}
fn1()
4.数组去重
// function quChong() {
// let arr = [1, 2, 5, 5, 4, 5, 4, 6, , 1, 5, 7]
// let array = []
// for (let item of arr) {
// // array是否包含item元素,如果有返回true
// if (!array.includes(item)) {
// array.push(item)
// }
// }
// console.log(array)
// return array
// }
function quChong(arr) {
// Set集合是ES6的语法,特点是无序,元素唯一,只能使用for-of遍历
return [...new Set(arr)]
}
let arr = [1, 2, 5, 5, 4, 5, 4, 6, , 1, 5, 7]
console.log(quChong(arr))
5.日期的api
5.1函数的表达式
let fn = () => {
// static 修饰的成员称静态成员
let date = new Date()
// now()函数是Date类的静态函数,只能使用Date.now()调用
let now = Date.now()
// 1970-1-1 8:00:00到现在经历的毫秒数
console.log(now) // 1651732085403
}
fn()
5.2测试日期字符串参数是否合法
let fn1 = (args) => {
// 合法数字,不合法NaN
return !Number.isNaN(Date.parse(args))
}
let rt = fn1('2022/05/05')
console.log(rt)
5.3 35天后是几号?
let fn2 = () => {
let date = new Date()
let day = date.getDate()
date.setDate(day + 35)
console.log(date)
}
fn2()