数组详解 \ 添加数组、删除数组元素、查找数组元素、合并数组、数组去重

indexOf数组元素索引,并返回元素索引,不存在返回-1,索引从0开始

 

var num_ = ['a','b','c','d','e']; 
num_.indexOf('a');//0
num_.indexOf(a);//-1
num_.indexOf('f');//-1
num_.indexOf('e');//4

一、添加数组push

添加最后一个元素,针对老数组最后一个元素后面添加一个元素,新数组返回元素个数 

var arr8=["a","b","c"];
var arr9=arr8.push("d");
console.log(arr8); //["a","b","c","d"];
console.log(arr9); // 4	

输出结果:

arry.push(2);//放入number 2
arry.push('3');//放入string 3

这是数组是依次在后面添加,index依次递增

 

$.inArray()函数用于在数组中搜索指定的值,并返回其索引值。如果数组中不存在该值,则返回-1;

二、查找数组中的某个元素

1知道下标获取值var element = arry[index];

2、知道值获取下标var index = $.inArry(element,arry);

如:

var arr = [ 4, "Pete", 8, "John" ];
$.inArray( "John", arr ) //返回3

 

三、合并数组 merge 、concat

 

1、$.merge()操作形成一个数组,其中包含两个数组的所有元素。追加到第一个数组中的第二个数组元素的顺序会被保留

var arr1=[1,'hello',3,'joy',5]
var arr2=[6,'name',7,'people',8]
dataAll = $.merge(arr1,arr2);//合并数据
console.log(arr1);	
console.log(arr2);
console.log(dataAll);

输出结果:

如果要分开的话

var arr1=[1,'hello',3,'joy',5]
var arr2=[6,'name',7,'people',8]
//dataAll = $.merge(arr1,arr2);//合并数据
dataAll = $.merge( $.merge([],arr1), arr2);
console.log(arr1);	
console.log(arr2);
console.log(dataAll);

 

2、concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本

var arr1=[1,'hello',3,'joy',5]
var arr2=[6,'name',7,'people',8]
dataAll = arr1.concat(arr2);//合并数据
console.log(arr1);	
console.log(arr2);
console.log(dataAll);

结果:

 

四、数组去重方法

1、双层循环,外层循环元素内层循环时比较值

2、利用splice直接在原数组进行操作,双层循环,外层循环元素内层循环时比较值值相同则删去,删除元素后,数组长度也减一;

  优点:简单易懂,缺点:占用内存高,速度慢

3、利用对象的属性不能相同的特点进行去重

4、数组递归去重

5、利用indexOf以及forEach

6、利用ES6的set,set数据结构类似于数组,其成员的值都是唯一的

例子:

Array.prototype.distinct = function (){
    var arr = this,
    result = [],
    len = arr.length;
        arr.forEach(function(v,i,arr){
            var bool = arr.indexOf(v,i+1);
            if(bool === -1){
                result.push(v);
            }
        })
    return result;
};
var a = ['abc','abcd','sss','2','d','t','2','ss','f','22','d'];	
var b = a.distinct()	
console.log(b.toString());

输出结果:

shift() 和pop()一样,不同的是操作的是开头删除的元素;

var s_ = [1,2,3,4,5]; 
s_.shift(); //a:[2,3,4,5]
console.log(s_)

输出结果:

unshift: 在集合开头添加一个或更多元素,并返回新的长度

var shuzu = [1,2,3,4,5]; 
shuzu.unshift();//[1, 2, 3, 4, 5]
shuzu.unshift("cc");//["cc", 1, 2, 3, 4, 5] 返回长度6
shuzu.unshift("aaa");//["aaa", "cc", 1, 2, 3, 4, 5] 返回长度7 

输出结果:

push:在集合中添加元素,并返回新的长度

var pu_ = [1,2,3,4,5]; 
pu_.push(6);//[1, 2, 3, 4, 5, 6]
pu_.push('xx');//[1, 2, 3, 4, 5, 6, "xx"] 返回长度7

输出结果:

pop:从集合中把最后一个元素删除,并返回这个元素的值

删除最后一个元素,针对老数组是删除最后一个,针对新数组是返回最后一个  pop

var arr6=[1,2,3,4,5]
var arr7=arr6.pop();
console.log(arr6);
console.log(arr7);

输出结果:

reverse 数组翻转,并返回翻转后的原数组,原数组翻转了

var fanzhuan = [1,2,3,4,5]; 
fanzhuan.reverse()//a:[5, 4, 3, 2, 1] 返回[5, 4, 3, 2, 1] 
console.log(fanzhuan)

输出结果:

 

join()  方法将数组的所有元素组成一个字符串

var arry=[1,2,3,4,5]
var str = arry.join("-");
console.log(typeof str+"  "+str);

返回结果:

splice() 方法用于插入、删除或替换数组的元素。注意:这种方法会改变原始数组!

语法:array.splice(index,howmany,item1,.....,itemX)

index 必需。规定从何处添加/删除元素,数组元素的下标,必须是数字

howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0"

item1,.....,itemX 可选。要添加到数组的新元素

 

var four = ['a','b','c','d','e']; 
four.splice(3,1,10,21,238,99);
console.log(four)

输出结果:

//第一参数是索引(从0开始),第二是长度
var one = ['a','b','c','d','e']; 
one.splice(0,2);
console.log(one)

输出结果:

var three = ['a','b','c','d','e']
three.splice(three.length-1,1)
console.log(three)

输出结果:

slice截取(切片)数组 ,得到截取的数组,返回从原数组中指定开始索引(包含)到结束索引(不包含)之间的项组成的新数组,原数组木变 ,索引从0开始

var sl_ = ['a','b','c','d','e']; 
sl_.slice(1,3);//["b", "c"] 
sl_.slice(0,4);//["a", "b", "c", "d"]
sl_.slice(3,4);//["d"]

输出结果:

五、数组排序

快速排序

//、快速排序 sort
var animal = ['dog','cat','tiger','pig','bird'];
animal = animal.sort();
console.log(animal)
	
var nums = ['12','2','5','36','4'];
nums = nums.sort();
console.log(nums)
var animal = ['dog','cat','tiger','pig','bird'];
animal = animal.sort();
console.log(animal)
	
var nums = ['12','2','5','36','4'];
nums = nums.sort();
console.log(nums)

输出结果:

结果数值的排序却不对,那是因为sort()方法排序,是基于ASCII值进行排序的。故它会认为36小于4(因为3的ASCII值小于4的ASCII值),所以要对排序的sort()方法定义一个比较函数:

var nums = ['12','2','5','36','4'];	
//定义sort的比较函数
nums = nums.sort(function(a,b){
	return a-b;
});	
console.log(nums)

这样输出结果就对了

冒泡排序

//冒泡排序
var maopao = [3,46,55,2,5,9,8,4,33,7];
function maopaoSort(arr) {
    for (var i = 0; i < arr.length; i++) {
	for (var j = 0; j < arr.length-i; j++) {
	    if (arr[j] < arr[j - 1]) {
		var temp;
		temp=arr[j];
		arr[j]=arr[j-1];
		arr[j-1]=temp; //下沉操作,即交换数组值
	    }
	}
//	console.log(arr)
//	console.log('这是第'+(i+1)+'次排序结果'+'</br>')
    }
}
maopaoSort(maopao);
console.log(maopao)
var maopao = [3,46,55,2,5,9,8,4,33,7];
function maopaoSort(arr) {
    for (var i = 0; i < arr.length; i++) {
	for (var j = 0; j < arr.length-i; j++) {
	    if (arr[j] < arr[j - 1]) {
		var temp;
		temp=arr[j];
		arr[j]=arr[j-1];
		arr[j-1]=temp; //下沉操作,即交换数组值
	    }
	}
//	console.log(arr)
//	console.log('这是第'+(i+1)+'次排序结果'+'</br>')
    }
}
maopaoSort(maopao);
console.log(maopao)

输出结果

插入排序

//插入排序
var charu = [3,26,15,2,5,9,8,4,66,7];
function charuSort(arr) {
    var result= [];
    result.push(arr[0]); //将第一个数最为基准
//  console.log('第一次排序将数组首个数字放入result结果集'+'</br>');
    for (var i = 1; i < arr.length; i++) {
	if (arr[i] > result[result.length - 1]) { //如果后来的数比基准数大,直接放到最后面
	    result[result.length] = arr[i]; //也可以写成result.push(arr[i]);
	} 
	for (var j = result.length;j > 0 && arr[i]<result[j - 1];j--){ //逐个向前比较,找到比自己大的则交换位置
	    result[j] = result[j - 1]; 
	    result[j - 1] = arr[i]; 
	}
//	console.log(result+'----');
//	console.log('这是第'+(i+1)+'次排序结果'+'</br>')
    }	
    return result;	
}
charuSort(charu);
console.log(charuSort(charu))

输出结果:

 

六、typeof 用来判定目标是什么类型。

console.log(typeof(10));
console.log(typeof('abc'));
console.log(typeof(true));
console.log(typeof(x));
console.log(typeof(function(){}))

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值