javascript数组操作

  1. 去重

  2. 删除指定元素

  3. 取最大值

去重

- 最简单的方法:对比法

思路:先定义一个新的空数组,然后遍历要去重的数组,判断新数组的每个元素和要去重数组中的每个元素是否相等,将不相等的值添加到新数组中.

代码:

console.time('arr');
	var removal = function(oldArr){
		var newArr = [];  							//定义一个新数组
		for (var i = 0; i < oldArr.length; i++) {	//循环要去重的数组
			if(!isHasThisArr(newArr,oldArr[i])){	//判断新数组的每个元素和要去重数组中的每个元素是否相等[注意:一定要使用全等号,否则数组元素会进行隐式转换,导致字符串和数字一样的情况下被去重掉]
				newArr.push(oldArr[i]);				//将不相等的值添加到新数组中
			}
		}
		return newArr;
	}

	var isHasThisArr  = function(newArr,oldArr){
		for (var i = 0; i < newArr.length; i++) {
			if(newArr[i]===oldArr){
				return true;
			}
		}
		return false;
	}

	var arrNum = [1,2,1,'2',1,3,4,3,2,1,5,6,5,4,5,6,7,8,9,0,8,6,6,5,'5',4,4,3];
	var removalArr = removal(arrNum);
	console.log(removalArr);    //[1, 2, "2", 3, 4, 5, 6, 7, 8, 9, 0, "5"]
console.timeEnd('arr');    //耗时:4.85302734375ms
		 	    

或者

console.time('arr');
	Array.prototype.removal = function(){
		if(this.length==0){
			return;
		}
		var newArr = [this[0]];							//创建新数组,并将要去重数组的第一个元素作为值
		for (var i = 0; i < this.length; i++) {			//循环要去重的数组
			var isBoolean = false;						//声明一个值为false的变量
			for (var j = 0; j < newArr.length; j++) {	//循环新数组
				if(newArr[j]===this[i]){				//判断新数组的每个元素和要去重数组中的每个元素是否相等[注意:一定要使用全等号,否则数组元素会进行隐式转换,导致字符串和数字一样的情况下被去重掉]
					isBoolean = true;					//重置变量值为true
					break;								//跳出新数组的循环
				}
			}
			if(!isBoolean){								
				newArr.push(this[i]);					//将不相等的值添加到新数组中 
			}
		}
		return newArr;
	}

	var arrStr = [1,'1',2,'2',1,2,1,3,4,3,2,1,5,6,5,4,5,6,7,8,9,0,8,6,6,5,5,4,4,3,'a','2','3','a'];
	var removalStrArr = arrStr.removal();
	console.log(removalStrArr);    //[1, "1", 2, "2", 3, 4, 5, 6, 7, 8, 9, 0, "a", "3"]
console.timeEnd('arr');    //耗时0.56689453125ms

- 存在兼容性的方法:indexOf方法

思路:定义一个新的空数组,利用indexOf的给定元素不存在返回-1的特性进行遍历去重

注意:indexOf 不兼容IE8及以下

代码:

console.time('indexOf');
	//利用数组的indexOf方法
	Array.prototype.removalArray = function(){
		var newArr = [];
		for (var i = 0; i < this.length; i++) {
			if(newArr.indexOf(this[i]) == -1){  //indexOf 不兼容IE8及以下 
				newArr.push(this[i]);
			}
		}
		return newArr;
	}

	var a = [1,2,1,2,3,'3',4,5,6,6,6];
	var b = a.removalArray();
	console.log(b);    //[1, 2, 3, "3", 4, 5, 6]
console.timeEnd('indexOf');    //耗时:0.43310546875ms

- 空间换时间法:hash法

思路:创建新数组和新对象,判断以数组索引为属性的属性是否存在,如果不存在将该属性赋值为true,然后把该元素之添加到新数组中

注意:利用hash表,可能会出现字符串和数字一样时出错的问题(不区分数据类型),如var a = [1, 2, 3, 4, '3', 5],会返回[1, 2, 3, 4, 5]

代码:

console.time('removalObj');
	//利用hash表,可能会出现字符串和数字一样的话出错,如var a = [1, 2, 3, 4, '3', 5],会返回[1, 2, 3, 4, 5]
	Array.prototype.removalObj = function(){
		var newArr = [];
		var ObjArr = {};
		for (var i = 0; i < this.length; i++) {
			if(!ObjArr[this[i]]){
				ObjArr[this[i]] = true;
				newArr.push(this[i]);
			}
		}
		return newArr;
	}

	var objArray = [1,2,1,2,3,'3',4,5,6,6,6];
	var removalObjArray = objArray.removalObj();
	console.log(removalObjArray);    //[1, 2, 3, 4, 5, 6]
console.timeEnd('removalObj');    //耗时:0.873046875ms

删除指定元素

思路:利用数组splice方法的特性,获取传入值的元素下标,然后从该下标开始删除,到该下标之后的第一个元素结束删除

//删除指定元素
Array.prototype.remove = function(val){
	for (var i = 0; i < this.length; i++) {
		if(this[i] === val){
			this.splice(i,1);
			break;
		}
	}
	return this;
}

var re = [1,2,3,4,5,'3','6'];
var res = re.remove('3');
console.log(res);    //[1, 2, 3, 4, 5, "6"]

取最大值

思路:先声明一个变量,值为数组的第一个元素,然后拿声明好的变量和数组中的元素循环对比,发现数组中的元素比变量的值大就把该值赋给变量

代码:

//取最大值
Array.prototype.max = function(){
	var max = this[0];
	for (var i = 0; i < this.length; i++) {
		if(this[i] > max){
			max = this[i];
		}
	}
	return max;
}

var arrMax = [1,2,2,3,,6,7,89,9,5,5,3,21];
console.log(arrMax.max());    //89
原文地址:https://www.cnblogs.com/wyangnb/p/8296910.html