DAY5
一、数组 是一个有序的数据集合
创建方式
1、字面量
var arr = [1,2,3,4,‘hello’,true] // 没有数据我们管它叫做 空数组
2、内置构造函数
var arr1 = new Array(5,6,7)
// 一个参数是数组的长度
// 二个及以上参数数组里面的数据
二、索引和length
索引就是 数组里面的 顺序
索引从 0 开始 数组里面获取最后一个元素:comsole.log(arr[arr.length-1]);
length 是数组的长度 (数组里面有多少个数据)
三、引用数据类型
目前我们接触的引用数据类型 函数(function) 数组(array) 对象(object)
引用数据类型 存的是地址
基本数据类型 存的是值
四、操作数组的方法
1、push() 往数组里面追加一条数据
语法:数组.push(你要追加的数据)
返回值:改变后的数组的长度
直接改变原数组
var res = arr.push(123)
2、pop() 删除数组的最后一项
语法:数组.pop()
返回值:被删除的那一项数据
直接改变原数组
var res = arr.pop()
3、unshift() 往数组的最前面添加一条 数据
语法:数组.unshift(你要添加的数据)
返回值:改变后的数组的长度
直接改变原数组
var res = arr.unshift(123)
4、shift() 删除数组的第 0 项数据
语法:数组.shift()
返回值:被删除的那一项数据
直接改变原数组
var res = arr.shift()
5、indexOf() 查询数组里面有没有某一条数据
语法:数组.indexOf(你要查询的数据)
返回值:第一个对应字符的索引
没有这个数据 -1
不会改变原数组
var res = arr.indexOf(‘z’)
6、concat() 拼接数据
语法:数组.concat(要拼接的数组或者数据)
返回值:就是拼接好的新的数组
不会改变原数组
var arr = [1,2,3]
//使用concat方法拼接数组
var newArr = arr.concat([4,5,6])
console.log(newArr) //[1,2,3,4,5,6]
7、splice() 截取数据,用于删除插入和替换数据
语法:数组.splice(开始截取的位置 ,截取的个数 ,第三个参数可选 要用来替换/插入的数据)
返回值:截取出来的数据组成的新的数组
会改变原数组
var res = arr.splice(2,0,10)
8、reverse() 反转数组
语法:数组.reverse()
返回值:反转后的原数组
直接改变原数组
var res = arr.reverse()
9、sort() 是用来给数组排序的
var arr = [2, 3, 1]
// 使用 sort 方法给数组排序
arr.sort()
console.log(arr) // [1, 2, 3]
//a-b 如果它的值为正数,就交换它们的位置
//函数在JavaScript中被称为一等公民,函数可以作为参数传递
//sort这个函数的参数就是一个函数 升序排列(默认)
var res = arr.sort(function (a, b) {
return a - b;
});
console.log(arr3);
console.log(res);
//b-a 如果值为正数,交换它们的位置 降序排列
var res = arr.sort(function (a, b) {
return b - a;
});
console.log(arr);
console.log(res);
降序排列:
arr.sort()
arr.reverse
10、join() 把数组里面的每一项内容链接起来,变成一个字符串,不会改变原始数组
var arr = [1, 2, 3]
// 使用 join 链接数组
var str = arr.join('-')
console.log(arr) // [1, 2, 3]
console.log(str) // 1-2-3
五、冒泡排序
<script>
//冒泡排序
var arr = [8, 9, 62, 46, 333, 874, 275, 6, 47, 999, 5641, 1]
function fn() {
//外面for循环控制循环次数
for (var i = 0; i < arr.length - 1; i++) {
//里面for循环控制比较
for (var j = 0; j < arr.length - 1 - i; j++) {
// 判断,如果数组中的当前一个比后一个大,那么两个交换一下位置
if (arr[j] > arr[j + 1]) {
var temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
var res = fn(arr)
document.write(res)
document.write('<br/>')
</script>
六、选择排序
在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止
<script>
//选择排序
var arr = [8, 9, 62, 46, 333, 874, 275, 6, 47, 999, 5641, 1]
function fn() {
//外层循环执行一次,内层循环执行一轮
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
var temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
return arr
}
var res = fn(arr)
document.write(res)
</script>
七、for in
// for 是用来遍历数组的
// for in 是用来遍历对象的
var obj = {
name:"Jack",
age:18
}
// 这个 key 只是一个变量 叫什么都可以
for(var key in obj){
// console.log(key) 属性名
// 因为 key 是一个字符串 [] 方式比较实用
console.log(obj[key])
}
//for 遍历出来的索引类型是number类型
//for in 遍历出来的索引类型是string类型
八、判断是否存在某个值
indexOf(元素) 用来找到数组中某一项的索引
=>如果存在返回元素在数组中索引号
=>如果元素不存在,返回-1
var flag = true
if (a.indexOf(n) === -1) {
flag = false
}
return flag
九、去掉数组重复元素,并返回新数组
// 使用for循环
var arr = ['a','a','a',1,2,3,3]
var newArr = []
// 循环遍历 arr 检测 newArr 当中有没有 arr 的每一项 如果没有就追加到 newArr 里面
for(var i = 0 ; i < a.length ; i++){
if(newArr.indexOf(arr[i]) === -1){
// 没有 那就追加
newArr.push(arr[i])
}
}
//使用forEach
var arr = [10, 20, 10, 30, 10, 40, 30]
var newArr = []
arr.forEach(function (item, index) {
if (newArr.indexOf(item) == -1) {
newArr.push(item)
}
return newArr
})
document.write(newArr)
//使用选择排序
+ 思路,把数组里面重复的东西去除掉,把数组里面的元素进行遍历然后进行比较,有相同的就删除掉
+ 使用选择排序去做
var arr = ['a', 'a', 'a', 2, 3, 2, 3, 3];
for(var i=0; i<arr.length-1; i++){
for(var j=i+1; j<arr.length; j++){
//使用前面的依次和后面的进行比较,如果相等就从数组里面删除对应的项
//splice(参数1, 参数2); 参数1表示从哪里开始 参数2表示删除几项
if(arr[i] == arr[j]){
arr.splice(j, 1);
//因为把数组里面的数据删除了 那么每一项都要往前挪一位 所以加一个 j--
j--;
}
}
}
console.log(arr);
十、内层空间(堆和栈):
+ 数据在内存空间里面存储的时候,不同的数据类型存储的位置不不一样
+ 内层空间分为栈区和堆区
+ js里面数据类型分为两种
1、基本数据类型,变量存储在内存的栈区
2、引用数据类型
1、数组对象存储在内存的堆区域
2、对象名,数组名存在栈区域
3、栈区域引用变量存储的值是对象在栈区域的内存地址