一、数组概念和创建方式
概念:
<script type="text/javascript">
//数组:一组数据,用[]表示,数据放到中括号里,用逗号隔开 有序的值的集合
//对象{},无序的值的集合
/*var arr = [1,2,3,4,5];
console.log(arr[2]);//索引从0开始,0表示的是第一个值(元素)
var obj = {d:4,a:1,c:3,b:2};
console.log(obj.a);*/
</script
创建方式:
<script type="text/javascript">
//字面量
/*var arr = ["a","b","c"];
var arr1 = [];
console.log(arr[0],arr[arr.length-1]);
for(var i = 0; i < arr.length; i++){
console.log(arr[i]);
}*/
/*console.log(arr1.length);//0
arr1.length = 5;
console.log(arr1);
console.log(arr1[0],arr1[3]);//undefined
console.log(arr[3]);//undefined*/
/*arr1[5] = 10;
console.log(arr1.length);
console.log(arr1,arr1[1]);*/
/*var arr2 = [1,,2,3,,,4];
console.log(arr2.length);//7*/
//构造函数 Array
//var arr = new Array(1,2,3);
//var arr = new Array(5);//单个参数表示长度
//console.log(arr);
</script>
二、数组的操作方法
<script type="text/javascript">
自定义一个函数或者对象的方法,js语言里自带的方法考虑的方面:
功能,参数,返回值
//增 删
push() 可以接受多个参数,将参数追加到数组的尾部,
返回增加后的数组的长度,原数组发生改变
var arr = [1,2,3,6];
var a = arr.push(11,22,33);
console.log(arr,a);//(7) [1, 2, 3, 6, 11, 22, 33] 7
pop() 不接受参数,从数组尾部删除一个元素,返回删除的元素,
原数组发生改变
var arr = [1,2,3,6];
var a = arr.pop();
console.log(arr,a);//(3) [1, 2, 3] 6
unshift()可以接受多个参数,将参数追加到数组的头部,返回增加后的数组的长度,
原数组发生改变
var arr = [1,2,3,6];
var a = arr.unshift(11,22);
console.log(arr,a);//(6) [11, 22, 1, 2, 3, 6] 6
shift()不接受参数,从数组头部删除一个元素,返回删除的元素,原数组发生改变
var arr = [1,2,3,6];
var a = arr.shift(11,22);
console.log(arr,a);//(3) [2, 3, 6] 1
//截取
slice()无参数 整体截取;1个参数,从该参数表示的索引位开始截取,直至数组结束 ;
2个参数,从第一个参数表示的索引位开始截取,到第2个表示索引结束,但不包括第2个
索引对应的值,返回截取的数组,原数组不改变
splice() 无参数,不截取;1个参数,该参数表示开始的索引;
2个参数,第2个参数表示截取的个数,
3个或以上的参数,将第3个及以后的参数插入到截取的开始位置
返回截取的数组,原数组发生改变
var arr = [11,2,3,5];
var a = arr.slice(0,1);
console.log(arr,a);//[11, 2, 3, 5] [11]
var a = arr.splice(1,2,33,44);
console.log(arr,a);//(4) [11, 33, 44, 5] (2) [2, 3]
//排序
//reverse(); 数组元素的翻转,原数组发生改变
var arr = [1,2,3,4];
var a = arr.reverse();
console.log(arr,a);//(4) [4, 3, 2, 1] (4) [4, 3, 2, 1]
//sort()从小到大和从大到小排序
var arr = [5,11,8,22,3,9];
arr.sort(function(a,b){
//return a-b;从小到大
return b - a;//从大到小
});
console.log(arr);//22 11 9 8 5 3
//join() 将数组转换成字符串
var arr = [1,2,3,4];
var str = arr.join("");//"1234"
var str = arr.join("+++++");//"1+++++2+++++3+++++4";
console.log(str);
//concat() 合并数组
var arr1 = [1,2];
var arr2 = [3,4];
var arr = arr1.concat(arr2);//[1,2,3,4]
var arr = arr1.concat(11,22);//[1,2,11,22]
console.log(arr);
</script>
<script type="text/javascript">
ES5新增数组操作方法
1、indexOf
2、forEach
3、map
4、filter
5、some
6、every
7、reduce(对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,
并且此返回值在下一次调用该回调函数时作为参数提供。)
//indexOf(item) 返回item在数组中的索引 ,如果数组中没有这个元素,
返回-1
/*var arr = [1,2,3,4];
console.log(arr.indexOf(11),arr.indexOf(1));//-1 0
console.log(arr.indexOf(2,2));//-1 第2参数表示检测的起始位*/
//数组去重
/*function noRepeat(arr){
var newArr = [];
for(var i = 0; i < arr.length; i++){
if(newArr.indexOf[arr[i]]==-1){
newArr.push(arr[i]);
}
}
}*/
//forEach() map()
/*var arr = [11,22,33,44];
var a = arr.forEach(function(item,index){ //第一个参数为元素,
第二参数为索引
//console.log(item,index);
return item+1;
});
console.log(a);
var a = arr.map(function(item,index){
//console.log(item,index);
return item+1;
});
console.log(a);*/
/*//filter //过滤出符合条件的元素
var arr = [1,2,3,4];
var a = arr.filter(function(item){
return item > 2;//过滤条件
});
console.log(a);*/
//some //只要有一个元素满足条件,返回true
//every //所有的元素都要满足条件,返回true
/*var arr = [1,2,3,4];
var a = arr.some(function(item){
return item > 2;
});
var b = arr.every(function(item){
return item > 2;
})
console.log(b);//false*/
//reduce
/*var arr = [1,2,3,4];
var sum = arr.reduce(function(a,b){
console.log(a,b);
return a + b;
});
console.log(sum);*/
var arr = [[1,2],[3,4],[5,6]];//借助reduce这个方法 实现数组的
扁平化 [1,2,3,4,5,6];
var brr = arr.reduce(function(a,b){
return a.concat(b);
});
console.log(brr);
</script>
三、数组的遍历
<script type="text/javascript">
var arr = [11,22,33,44];
for(var i = 0; i < arr.length; i++){
console.log(arr[i]);
}
//for-in
for(var i in arr){//通过i访问数组里的元素
//console.log(i,arr[i]);
document.write("第"+(i+1)+"个:"+arr[i])+"<br>";
}
可以用来遍历数组,但是一般不用,而是用for-in遍历对象
var obj = {a:1,b:2,c:3};//{"a":1,"b":2,"c":3}
for(var i in obj){ //i表示的属性名(键名)
//console.log(i,obj.i);//obj.i 会把i当成一个属性名看待,
而obj里又没有这个属性,取值为undefined,所以不用obj.i,用obj.[i]
console.log(obj[i]);//i是一个变量,所以不加引号
}
//对象的属性名是一个字符串
var obj = {};
/*obj[1] = 'aaa';*/
var obj1 = {a:1};//字符串表示形式:"[object Object]"
obj[obj1] = 10;
console.log(obj);//{[object Object]: 10}
</script>
四、数组类型
<script type="text/javascript">
//用数组表示数据的时候,数组元素的类型通常一致
//var arr = [1,"abc",true,function(){},{}]; 代码可读性非常差
var arrName = ["john1","john2","john3"];
var arrScore = [100,100,0];
var arrObj = [{},{},{}];
var arrs = [[1,2],[3,4],[5,6]];//二维数组
var arrss = [[1,[2]],[3,4],[5,6]];//多维数组
</script>
五、数组排序
<script type="text/javascript">
//冒泡排序 从小到大
//数组中的元素两两比较,如果第一个元素比第二个元素大,交换位置,
然后让第二个和第三个比较,以此类推,第一轮结束后,最大的元素排在了最后
//然后进行第二轮,两两比较
var arr1 = [22, 13, 57, 4, 66, 12];
function bubbleSort(arr) {
for(var i = 0; i < arr.length - 1; i++) { //外层循环控制轮数
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;
}
console.log(bubbleSort(arr1));
选择排序:
假设第一个元素为最小值,设一个变量minIndex保存这个值对应的索引,
然后让最小索引对应值和其他剩余的所有元素进行比较,如果有比minIndex对应的值小
的,改变minIndex的值,再让minIndex对应的值和剩余的值比较,直至结束,
第一轮完成能取到一个最小值,和第一个值交换位置
进行第二轮,假设第二个元素为最小值,以此类推
function selectSort(arr){
for(var i = 0; i < arr.length - 1; i++){
var minIndex = i;
for(var j = i+1; j < arr.length; j++){ //确定一个最小值对应的索引
if(arr[minIndex] > arr[j]){
minIndex = j;
}
}
var temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;//交换位置
}
return arr;
}
console.log(selectSort(arr1));
</script>
六、数组的去重
<script type="text/javascript">
/*function noRepeat(arr){
for(var i = 0; i < arr.length-1; i++){
for(var j = i+1; j < arr.length; j++){
if(arr[i]===arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr;
}*/
/*function noRepeat(arr){
arr.sort();
for(var i = 0; i < arr.length-1; i++){
if(arr[i]===arr[i+1]){
arr.splice(i+1,1);
i--;
}
}
return arr;
}*/
//推荐 结合对象和数组的特点
function noRepeat(arr){
var obj = {}; //把数组的元素看成是对象的属性,
//如果属性值为undefined,证明不含属性名,可以赋值为1
//如果下次再次出现属性,证明是重复的值,可以扔掉
var newArr = [];
for(var i = 0; i < arr.length; i++){
if(obj[arr[i]]===undefined){
obj[arr[i]] = 1;
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(noRepeat([1,1,1,2,2,1,2,3]));
</script>