js数组操作-数组去重
第一个和第二个,都是对新数组或新json进行操作,而第三个是对原数组本身进行indexOf。
第一个是用新数组的indexOf来判断是否有重复元素,而第二个是通过nHash[item]来判断是否存在。
var array = [1, 2, 3, 2, 1]; Array.prototype.unique1 = function () { var nArray = []; // 新建一个数组 console.log(this, 'this的值'); for (var i = 0, len = this.length; i < len; i++) { //遍历当前数组 var item = this[i]; //如果当前数组的第i没有保存在临时数组中,那么将当前项push到临时数组里面 if ( nArray.indexOf(item) == -1 ) { // 数组通过通过indexOf()来判断这个item是否存在这个新数组中 nArray.push(item); }; }; return nArray; // 返回这个新数组 } console.log(array, array.unique1()); var array2 = [1, 2, 3, 2, 1]; Array.prototype.unique2 = function() { var nArray = [], nHash = {}; // n为hash表,r为临时数组 for (var i = 0, len = this.length; i < len; i++) { var item = this[i]; console.log(nHash[item]); // undefined 3, true 2 if (!nHash[item]) { // 如果hash表中没有当前项 对象通过nHash[item]即value为undefined || true来判断是否存在。 nHash[item] = true; // 存入hash表 nArray.push(item); //把当前数组的当前项push到临时数组里面 }; }; return nArray; }; console.log(array2.unique2()); var array3 = [1, 2, 3, 2, 1]; Array.prototype.unique3 = function() { var nArray = []; nArray.push(this[0]); for (var i = 1, len = this.length; i < len; i++) { // 从一开始减少一次循环,从第二项开始遍历 var item = this[i]; if (this.indexOf(item) == i) { // 对原数组自身进行操作 //如果当前数组的第i项在当前数组中第一次出现的位置不是i, //那么表示第i项是重复的,忽略掉。否则存入结果数组 nArray.push(item); }; }; return nArray; }; console.log(array3.unique3());