js内置对象之Array

在这里插入图片描述

前言

首先,作为一门编程语言,JavaScript(下面简称js)提供了一些内置的对象和函数。它们提供了编程的几种最常用的功能。而Js的内置对象主要有以下几种。
String对象:处理所有的字符串操作
Math对象:处理所有的数学运算
Date对象:处理日期和时间的存储、转化和表达
Array对象:提供一个数组的模型、存储大量有序的数据
而本章主要讲的便是 js内置对象之Array

1、数组的创建

字面量的创建

eg: var arr = ["hello",123,true ];
放置一个数值时,就是一个数据
eg: var arr1 = [5];

构造函数的创建

eg: var arr2 = new Array("hello",123,true);
放置一个数值时,表示长度或数据的个数,空undefined

var arr2 = new Array(5);            // (5) [empty × 5]

2、数组的遍历

for 循环遍历

数组是一个有序的集合,有序就是,索引从0开始,按照顺序到length-1结束,所有可以用for 循环遍历,方法如下

    var arr = ["hello",2,3,4,"world"];
    for(var i=0;i<arr.length;i++){ 
     // i现在是数组的索引
    console.log(i);                  //0,1,2,3,4 
    //根据数组的索引拿到数组的数据
	console.log(arr[i]);   }   //"hello",2,3,4,"world" 
for in遍历

遍历语句for-in,类似于循环,但for-in可以遍历没有索引的集合,也被称为枚举
对象只有键,没有顺序,所以不能使用循环遍历,数组也是对象,因此数组也可以使用for-in

var arr = ["hello",4,5,6,"world"];
for(var i in arr){
 console.log(arr[i]); 
 }   

3、数组的操作——方法操作

var arr = [“1”,2,3,4,“5”];

arr.push(要在尾部增加的内容,会修改原数组)
arr.unshift(要在头部增加的内容,会修改原数组)

arr.pop( ) 无参数,删除原数组的最后一位
arr.shift( ) 无参数,删除原数组的第一位

arr.splice( 一个两个三个参数都可以 )
参数:一个,表示索引,从指定索引,删除到结束
参数:两个,第一个表示索引,第二个表示个数,从指定索引,删除指定个数个
参数:三个,前两个同上,从第三个参数开始,都是数据,从指定索引,删除指定个数个,填充第三个参数向后所有的数据

arr.reverse() 翻转数组

arr.join(连接符) 将数组转换成对应的字符串

arr.slice(一个或者两个参数) 两个的时候 第一个表示索引,第二个是指定截止位置的后一位,可以理解为左闭右开
功能:从指定索引开始截取,截取到指定位置的前一个,返回成一个新数组

arr1 .concat (arr2) 合并数组

arr.sort(); 排序
但是sort默认是字符的排序规则:诸位比较,得到结果就停止
如 var res=numArr.sort();
     console.log(numArr);                   //[163, 2456, 45, 63, 79]
     console.log(res);                         //[163, 2456, 45, 63, 79]
这种排序得到的结果并不准确,因此有了下面的改进
修改:固定格式,传一个回调函数,被系统执行,不用管传哪去了

numArr.sort(function(a,b){
return a-b;              //升序 [45, 63, 79, 163, 2456]
returnb-a;               //降序 [2456, 163, 79, 63, 45]
})
 console.log(numArr);
ES5对数组的方法的新增:

arr.indexOf(一个或者两个参数) 第一个是要查找的数据,第二个可以省略,表示从第几位开始查找
根据传入的数据,查找数组中的位置,找到了返回索引,没找到返回-1
arr.lastIndexOf 同上,从反向开始查找

//功能:遍历
arr.map(  function(value,index,self){
//value是数组里对应索引的值  index是索引号  self是原数组
console.log(value,"---",index,"---",self); })       
// **map方法可以修改值,并返回到新数组中**
//例如 return value * 1.3;   
arr.filter(function(val,idx,self){
            return val > 50; 
           }) 

// filter可以过滤值,并返回到一个新数组中

遍历数组中是否有符合条件的值,只要有符合,那么就是true,同时停止遍历
arr.some(function(val,idx,self){
return val == 42;
})

遍历数组中是否有符合条件的值,必须全部符合,都是true,才是true,如果有一个false,那么就是false,同时停止遍历
arr.every(function(val,idx,self){
return val < 80;
})

4、数组的排序

1、冒泡排序:规则:两两比较,大的放后面
var arr = [6,4,2,1,3];
// 外层循环控制行
// 内层循环控制列
console.log(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 now = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = now;
	 }  
  }    
}
console.log(arr);
2、选择排序:规则:每次拿出一个数据,和其他所有数字相比较,得到大的或小的,与初始位置做交换

比如,拿出第一位和后面所有作比较,找到最小的,放在第一位,第一位原本的值,放在最小的值得原来的位置

var arr = [3,4,5,2,1];
for(var i=0;i<arr.length-1;i++){
// 假设,将第一位保存出来,用来和后面所有作比较
// 假设,第一位是最小值
	var iNow = arr[i];
// 立即将假设的最小值的位置,也存出来
	var iNowIndex = i;                                              
	for(var j=i+1;j<arr.length;j++){ 
 // 验证假设第一位是最小的正确性,不正确,就拿到比假设的值还小的值
		if(iNow > arr[j]){             
//不该和自己比,故用arr[j+1],for中条件已加1,此处便不用了
			iNow = arr[j];
			iNowIndex = j;
  		}
 	}
//小循环结束后,iNow必然是最小值,此时此刻数组还没有发生变化
	 var ls = arr[i];
	 arr[i] = iNow;
	 arr[iNowIndex] = ls;
}
console.log(arr);

5、数组的去重

此处只列举4种情况,如需要更多可留言

方法1:借助新数组,判断新数组中是否存在该元素,如果不存在则将此元素添加到新数组中 首先需要创建一个空数组,然后利用indexOf方法来判断新数组中是否有该元素,若没有则把元素添加到新数组中。
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
function noRepeat1(arr){
	var newArr = [];
	for(var i = 0; i < arr.length; i++){
		if(newArr.indexOf(arr[i]) == -1){         
	// 如果arr的第i个数在新数组中不存在
			 newArr.push(arr[i]);               
		 // 将这个值增加到新数组中
		}
	}
	return newArr;
}
var arr2 = noRepeat1(arr);
console.log(arr2);       
方法2:选择排序,将数组的每一个元素依次与其他所有元素做比较,发现重复元素,删除,这里要借助两个循环来实现,因为不需要跟其自身相比较,所以内层循环需要从i+1开始,然后判断,如果两者相等,则删除该元素,判断之后还需要对内循环进行一个j–的操作,以防止漏掉元素
  var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];
  function noRepeat2(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开始删除,删除一位,防止遗漏
               j--; 
              }
        }
    }
    return arr;
 }
 var arr2 = noRepeat1(arr);
console.log(arr2);   
方法3:利用filter过滤,filter可以过滤值,并返回到一个新数组中,利用这种方法去重就是让其只返回该元素首次出现的位置索引和数值索引相等的值,不相等的则直接过滤掉。
var arr = ['apple','banana','pear','apple','orange','orange'];
var newArr = arr.filter(function(value,index,self){   
// filter可以过滤值,并返回到一个新数组中
	//console.log(value,"---",index,"---",self);                       
	// value是值,index是索引,self是数组本身
   return self.indexOf(value) === index;                            
//只返回该数组中首次出现的位置索引与数组索引相等的值
});
console.log(newArr);                                              
方法4:双层循环改变原数组,这一种方法就是外层循环控制行,内层循环控制列,然后每一个元素都跟数组里所有的元素比较一遍,将相同的值删除,这里要注意一点,比较时外层循环的i和内层循环的j不能相等
var arr = [1,1,2,2,3,3,4,4,5,5,4,3,1,2,6,6,6,6];
function noRepeat4(arr){
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr.length; j++) {
            if (arr[i] == arr[j] && i != j) {
                arr.splice(j, 1);
            }
        }
    }
    return arr;
}
var arr2  = noRepeat4(arr);
console.log(arr2);       
发布了6 篇原创文章 · 获赞 24 · 访问量 272

猜你喜欢

转载自blog.csdn.net/ephemeral0/article/details/104449691