我是靠谱客的博主 冷艳小甜瓜,最近开发中收集的这篇文章主要介绍JavaScript内置对象Array的扩展(去重,排序,合并),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

JS的一大灵活之处就在于可以对内置对象进行扩展,添加属于自己的方法,本文将使用常见的算法对Array进行若干扩展!

1,去重复

1.1,使用Array本身就有的indexOf方法:

Array.prototype.uniqeu = Array.prototype.uniqeu || function() {
var aRet = [];
for (var i = 0, len = this.length; i < len; i++) {
if (aRet.indexOf(this[i]) === -1) {
aRet.push(this[i]);
}
}
return aRet;
};

2.2,循环遍历数组,同时建立一个json对象,记录是否重复,高效!

Array.prototype.uniqeu = Array.prototype.uniqeu || function() {
var aRet = [];
var json = {};
for (var i = 0, len = this.length; i < len; i++) {
if (!json[this[i]]) {
aRet.push(this[i]);
json[this[i]] = true;
}
}
console.log(json);
return aRet;
}

这里写图片描述



2,排序

2.1,冒泡排序
这里写图片描述

从上图中可以看出,冒泡排序的循环是分两层的,即一个外层一个内层,外层循环每次排好一个就是把当前最大的数字‘沉’到最下面,每排好一个数,都要进行内部的一次循环,挨个比较。每次外循环都会排好一个数字,第0次把最大的数排到最后,第1次把次大的数字排好……所以内循环的时候,对于前面已经排好的i个数字就不要继续再排了也就是下面的 j < len - 1 - i;

Array.prototype.bubbleSort = Array.prototype.bubbleSort || function() {
for (var i = 0, len = this.length; i < len - 1; i++) {
for (var j = 0; j < len - i - 1; j++) {
if (this[j] > this[j+1]) {
var t = this[j];
this[j] = this[j+1];
this[j+1] = t;
}
}
}
return this;
}

其实对于上面的排序仍然是不太好的冒泡,如果遇到很坏的情况,上面的排序倒是不错,但如果遇到很好的情况,比如数组本来就是排好序的,那就没必要再折腾下去了,设计一个标志位

Array.prototype.bubbleSort = Array.prototype.bubbleSort || function() {
var bSorted = true;
for (var i = 0, len = this.length; i < len - 1 && bSorted; i++) {
bSorted = false;
for (var j = 0; j < len - 1 - i; j++) {
if (this[j] > this[j+1]) {
var t = this[j];
this[j] = this[j+1];
this[j+1] = t;
bSorted = true;//如果已经排好序了就不存在this[j]>this[j+1]了
}
}
}
return this;
}

2.2,二分查找(折半查找)

用于已经排好序的数组


Array.prototype.binarySearch = Array.prototype.binarySearch || function(aim) {
var low = 0;
var high = this.length - 1;
while(low <= high) {
var mid = Math.ceil((low + high) / 2);
if (aim > this[mid]) {
low = mid + 1;
} else if (aim < this[mid]) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}

下面附一个递归的二分查找,用于学习

function binarySearch(arr, low, high, target) {
var mid = Math.ceil((low + high)/2);
if (low <= high && low >= 0 && high < arr.length) {
if (target > arr[mid]) {
return binarySearch(arr, mid+1, high, target)
} else if (target < arr[mid]) {
return binarySearch(arr, low, mid-1, target);
} else {
return mid;
}
} else {
return -1;
}
}

合并去重

var arr1 = [1,2,3,4,5];
var arr2 = [3,2,6,7,9];
//合并两个数组
Array.prototype.myConcat = Array.prototype.myConcat || function(arr) {
for (var i = 0; i < arr.length; i++) {
this.indexOf(arr[i]) === -1 ? this.push(arr[i]) : {};
}
return this;
}
alert(arr1.myConcat(arr2));//1,2,3,4,5,6,7,9

最后

以上就是冷艳小甜瓜为你收集整理的JavaScript内置对象Array的扩展(去重,排序,合并)的全部内容,希望文章能够帮你解决JavaScript内置对象Array的扩展(去重,排序,合并)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部