文章目录
数组
数组数据类型:
也是JS中的一种数据类型,是引用数据类型,数据是存储在堆区的。
数组中每一个数据,都有对应的编号,这个编号叫索引,也叫下标。下标默认是从0开始的。
可以通过索引或下标操作数组中的某个数据。
操作: 查看,添加,修改,删除 说到操作,就要想到增删改查(CRUD)。
提示:以下是本篇文章正文内容,下面案例可供参考
一、创建数组
1.通过字面量创建数组
var arr = [1,“a”,123,true,und,888]; // []表示一个数组 arr是变量
在[]中就可以写一堆的数据。
<script>
// 1)通过字面量的形式创建数组
// 1这个数据的下标是 0
// "a"这个数据的下标是 1
// 2这个数据的下标是 2
// .....
var arr1 = [1,"a",2,"b",true,undefined];
console.log(arr1);
</script>
结果如下:
2.通过构造器创建数组
JS内部帮我们提供了一个构造函数,也叫类 Array
var arr = new Array(); // Array是类 new一个类,就得到一个对象
<script>
// 10不是代表10这个数据,代表是这个数组中可以放10个元素(数据)
var arr = new Array(10);
// a,b,c就代表数组中的三个数据
let arr2 = new Array("a","b","c")
console.log(arr2);
// arr2是对象 对象中有很多属性或方法 通过打点,就可以调用这个属性或方法
// length代表数据中的长度
console.log(arr2.length);
</script>
结果如下:
二、操作数组
1.数组length属性
数组中有一个length属性 表示数组的一个长度。length属性可读可写。
- 读:获取数组的长度
- 写:设置数组的长度
当我们设置的比本身长度小,那么就相当于删除
当我们设置的比本身长度大,那么多出来的就是空补齐
<script>
// 数组中的每一个数据可以叫数组的元素
var arr = ["你好","世界"]; // 通过字量面的形式创建一个数组
// arr.length 叫读属性 arr.length = xxx 叫写属性 重新给属性赋值
console.log(arr.length); // 长度 表示你数组中装了几个元素
arr.length = 1; // 重新给length赋值
console.log(arr);
console.log(arr.length);
arr.length = 5; // 重新给length赋值
console.log(arr);
console.log(arr.length);
</script>
结果如下:
2.数组索引操作
默认情况下,数组中的每一个元素都索引,从0开始,依次+1。最后一个元素的索引是lenght-1。
索引也是一个可读可写的属性:
读:读取的是指定索引位置的数据
=> 如果数组确实有这个索引,那么就是这个位置的数据
=> 如果数组没有这个索引位置,那么就是und
写:设置指定索引位置的数据
=> 如果有这个索引位置,那么就给这个索引位置重新设置数据
=> 如果这个索引位置不存在,那么就是添加一个新数据
<script>
let arr = ["hello","world","nihao"];
console.log(arr); // arr代表整个数组
console.log(arr[0]); // 代表数组中的第1个元素
console.log(arr[100]);
console.log("------------------");
arr[0] = "新来的"; // 把一个新的数据赋值给数组中的第1上元素
arr[110] = "最后一个"
console.log(arr);
</script>
结果如下:
3.数组的遍历
所谓的遍历就是指把数据中的每一个元素都取出来的。
使用for循环进行遍历,除了for循环,还有其它方案,后面说。
<script>
let arr = ["a","b","c","d","e","f"];
for(var i=0; i<arr.length; i++){
console.log(arr[i]);
}
</script>
结果如下:
4.其它的操作
(1)push()
=> 语法:数组.push(数据1,数据2,数据3…)
=> 作用:把新的数据,追加到数组的末尾位置
=> 返回值:新数组的长度
=> 影响原数组
<script>
let arr = ["hello","nihao"];
// r表示push方法的返回值
let r = arr.push("世界")
console.log(arr); // 数组
console.log(r);
</script>
结果如下:
(2)pop()
=> 语法:数组.pop()
=> 作用:删除数组中最后一个数据
=> 返回值:被删除的数据
=> 影响原数组
<script>
let arr = ["hello","nihao"];
let r = arr.pop()
console.log(arr);
console.log(r);
</script>
结果如下:
(3)unshift()
=> 语法:数组.unshift(数据1,数据2,数据3…)
=> 作用:把新的数据,插入到数组的前面位置
=> 返回值:新数组的长度
=> 影响原数组
<script>
let arr = ["hello","nihao"];
let r = arr.unshift("xixi")
console.log(arr);
console.log(r);
</script>
结果如下:
(4)shift()
=> 语法:数组.shift()
=> 作用:删除数组中第一个数据
=> 返回值:被删除的数据
=> 影响原数组
<script>
let arr = ["hello","nihao"];
let r = arr.shift()
console.log(arr);
console.log(r);
</script>
结果如下:
(5)reverse()
=> 语法:数组.reverse()
=> 作用:方法将数组中元素的位置颠倒,并返回该数组。数组的第一个元素会变成最后一个,数组的最后一个元素变成第一个
=> 返回值:返回该数组
=> 影响原数组
<script>
let arr = ['one', 'two', 'three'];
// reverse是改变了原数据,返回一个新的数组
let newArr = arr.reverse();
console.log(arr);
console.log(newArr);
</script>
结果如下:
(6)sort()
=> 语法:数组.sort()
=> 作用:对数组的元素进行排序,并返回数组。
=> 返回值:返回数组
=> 影响原数组
<script>
// let arr = ['one', 'two', 'three'];
// 默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的
let arr = [4,2,9,12,40,11]
// let arr = ["hello","abc","qaz","uuo"];
// sort是方法 sort() sort("abc") //abc是实参的
// 函数调用的时的参数是实参
// 函数声明时的参数是形参
// sort(function(){}) function(){}是一个参数 只不过实参是一个函数
// 在JS中函数也是数据
let r = arr.sort(function(a,b){
// return a-b; // 升序
return b-a; // 降序
});
console.log(arr);
console.log(r);
</script>
结果如下:
(7)splice()
=> 语法:数组.splice(开始索引,多少个)
=> 作用:删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
=> 1)截取数组 2)替换新内容
=> 截取: 数组.splice(开始索引,多少个) 如果第2个参数不写,默认就截取到最后
=> 替换新内容: 数组.splice(开始索引,多少个,替换数据1,替换数据2…)
=> 把替换数据按照顺序插入到你截取的位置
=> 返回值:返回一个数组
=> 影响原数组
<script>
let arr = ['one', 'two', 'three', "four", "five", "six"];
// 1表示索引 2表示截取两个
// 作用1:截取数组中的某一个部
let res = arr.splice(1, 2);
console.log(res);
// 也影响了原数组
console.log(arr);
</script>
结果如下:
<script>
let arr = ['one', 'two', 'three', "four", "five", "six"];
let res = arr.splice(1,2,"xixi","haha")
console.log(res);
console.log(arr);
</script>
结果如下:
(8)concat()
=> 语法:数组.concat(数组1,数组2…)
=> 作用:合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
=> 不会影响原数组
<script>
let arr1 = ["a","b","c"];
let arr2 = ["d","e","f"];
let arr3 = ["xixi","haha","hehe"];
let res = arr1.concat(arr2,arr3)
console.log(res);
console.log(arr1);
console.log(arr2);
console.log(arr3);
</script>
结果如下:
三、排序算法
更多排序算法可以去掘金网站上看别人的文章:JS排序算法
1.冒泡排序(bubbleSort)
代码如下(示例):
<script>
// 冒泡排序(bubbleSort) arr叫形参
function bubbleSort(arr){
for(var i=0; i<arr.length-1; i++){
// console.log(arr[i]);
for(var j=0; j<arr.length-1-i; j++){
// console.log(arr[j]);
if(arr[j] > arr[j+1]){
var temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp;
}
}
}
return arr;
}
var arr = [2,10,3,2,69,76,12,49,1];
// 函数的返回值就是排好序的数组
console.log(bubbleSort(arr));; //arr是实参
</script>
结果如下:
2.选择排序(selecttionSore)
代码如下(示例):
<script>
// 选择排序(selecttionSore)
function selecttionSore(arr){
for(var i=0; i<arr.length-1; i++){
// console.log(arr[i]);
let indexMin = i; // 暂且把第1个元素当成最小的元素
for(var j=i; j<arr.length; j++){
if(arr[j] < arr[indexMin]){
indexMin = j;
}
}
var temp = arr[i]
arr[i] = arr[indexMin];
arr[indexMin] = temp;
}
return arr;
}
var arr = [2,10,3,2,69,76,12,49,1];
console.log(selecttionSore(arr));
</script>
结果如下: