一.json数组
一提到javascript的数组方法,第一个想到的肯定是json数组,用json数组存取数据的优势是跨平台、兼容性好和安全性高。
关于json数组的简单使用和遍历方式已经在前面的博客当中总结过,请戳这里查看
二.常用的数组方法
1.数组的创建,例如:
var arr1 = [1,2,3,4];
var arr2 = ['a','b','c','d'];
var arr3 = [];
//数组变量
var arr4 = new Array(1,2,3);//对象定义数组
//推荐第一种定义数组的方法
2.获取数组的长度,arr1.length
3.向数组的末尾添加一个或更多元素,并返回新的长度,arr1.push()
4.向数组的开头添加一个或更多元素,并返回新的长度,arr1.unshift()
5.删除数组的最后一个元素并返回删除的元素,arr1.pop()
6.删除并返回数组的第一个元素,arr1.shift()
练习1:利用上面的3-6这四个方法实现数组排队,例如var arr = [‘1’,’2’,’3’,’4’,’5’]变成[”5,’1’,’2’,’3’,’4’],再变成[‘2’,’3’,’4’,’5’,’1’]
代码如下:
<script>
var arr=['1','2','3','4','5'];
var arr1=[];
var arr2=[];
var s=arr.pop();
arr.unshift(s);
alert(arr);
arr=['1','2','3','4','5'];
var p=arr.shift();
arr.push(p)
alert(arr);
</script>
注:这个技巧很重要
7.数组的排序sort
方法:sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。
A.默认排序顺序为按字母升序,eg:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
//输出结果为:
//Apple,Banana,Mango,Orange
B.使用数字排序,你必须通过一个函数作为参数来调用。函数指定数字是按照升序还是降序排列,例如:
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});
//数字升序排序:1,5,10,25,40,100
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return b-a});
//数字降序排序:100,40,25,10,5,1
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
//字母降序排序:Orange,Mango,Banana,Apple
该知识点解释地更为具体一点应该如下:
<script>
window.onload=function(){
//js中Array对象自带sort()排序方法,实现是快速排序,默认按升序排序。输入Cmp函数作为入參可以实现自定义的排序规则
var data=[3,1,2,5,4,8,6,9,7,3];
data.sort(upCmp);
console.log(data);
}
//这个函数是提供给A️rray对象的sort()方法做入參的,升序
function upCmp(value1,value2){
console.log(value1,value2);
if(value1>value2){
return 1;
}else if(value1<value2){
return -1;
}else{
return 0;
}
}
//这个函数是提供给A️rray对象的sort()方法做入參的,降序
function slowCmp(value1,value2){
if(value1<value2){
return 1;
}else if(value1>value2){
return -1;
}else{
return 0;
}
//如果是纯数字的话,可以直接return value2-value1;
}
</script>
这里既然提到了数组的排序方法,下面将几种常见的数组排序方法总结如下:
<script>
//最简单的排序
var t;
function easySort(data){
for(var i=0;i<data.length-1;i++){
for(var j=i+1;j<data.length;j++){
if(data[i]>data[j]){
var t=data[i];
data[i]=data[j];
data[j]=t;
}
}
}
return data;
}
//冒泡排序
function bubbingSort(data){
var len=data.length;
for(var i=0;i<len;i++){
for(var j=0;j<len-1-i;j++){
if(data[j]>data[j+1]){
var tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
}
}
}
return data;
}
//选择排序
function selSort(data){
var len=data.length;
for(var i=0;i<len;i++){
var k=i;
for(var j=i;j<len;j++){
if(data[j]<data[k]){
k=j;
}
}
if(k!=i){
var tmp=data[k];
data[k]=data[i];
data[i]=tmp;
}
}
return data;
}
//插入排序
function insertSort(data){
var len=data.length;
for(var i=1;i<len;i++){
var tmp=data[i];
for(var j=i-1;j>-1&&tmp<data[j];j--){
data[j+1]=data[j];
}
//这里使用了js变量出块级代码域,所存储的值依然可以使用
if(j!=i-1) data[j+1]=tmp;
}
return data;
}
//快排代码等待整理
</script>
重点研究一下冒泡排序(带有岗哨的冒泡排序):
<script>
function BobbltSort(){
var tag;
var arr = [3,4,6,2,1,8,9,5,7,0];
for(var i=0; i<arr.length; i++){
tag = true;
//从后向前冒泡
// for(var j=arr.length-1; j>i; j--){
// if(arr[j]<arr[j-1]){
// var temp = arr[j];
// arr[j] = arr[j-1];
// arr[j-1] = temp;
// }
// tag = false;
// }
// if(tag){
// break;
// }
//从前向后冒泡
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;
}
tag = false;
}
if(tag){
break;
}
}
alert(arr);
}
BobbltSort();
</script>
此外,再补充一点的是,排序算法的稳定性是指对于数组中的两个元素a[i]和a[j],且a[i]在a[j]之前,如果经过一次排序之后它们在数组中的相对位置依然没有发生改变(即a[i]依然在在a[j]之前),则称该排序算法是稳定的
8.反转数组的元素顺序,arr1.reverse()
,该方法在上面的排序例子中有所体现,sort
方法原本默认按数组中元素的字母升序排列,排完之后若再调用reverse
方法即可实现按照元素字母降序排列。
9.连接两个或更多的数组,并返回结果,例:
var hege = ["Cecilie", "Lone"];
var stale = ["Emil", "Tobias", "Linus"];
var kai = ["Robin"];
var children = hege.concat(stale,kai);
//合并三个数组的值:Cecilie,Lone,Emil,Tobias,Linus,Robin
10.把数组转换为字符串,并返回结果,arr1.toString()
,例如:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.toString();
//将数组转换为字符串:Banana,Orange,Apple,Mango
11.把数组的所有元素放入一个字符串,arr1.join()
,例如:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join();
//把数组中的所有元素转换为一个字符串:Banana,Orange,Apple,Mango
//使用不同的分隔符:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join(" and ");
//输出:Banana and Orange and Apple and Mango
12.arr1.splice
方法:
A.作用是删除时:
splice(a,b)
//a是删除第一项序号,b表示删除的数量
B.作用是替换时:
splice(a,b,c)
//a是替换的起点项,b表示替换的数量,c及c后面表示要用什么数据(可以为多个数据)替换
C.作用是添加时:
splice(a,0,c)
//a是添加的起点项,0表示不删除,c及c后面表示要加什么数据或多个数据
注:该函数只有删除的时候会有返回值,返回被删除的数据
练习2:数组去重(去掉数组的重复数据),如:var arr =[1,2,2,3,4,2] 变成[1,2,3,4]
代码如下:
<script>
var arr=['1','2','2','2','3','4','2'];
for(var i=0;i<arr.length;i++){
var m=arr.length;
var s=arr[i];
for(var j=i+1;j<m;j++){
if(s==arr[j]){
arr.splice(j,1);
j--;//注意此处,去掉一个重复值时数组长度要减1
}
}
}
alert(arr);
</script>