集合處理方法

使用es6的方式去重
var arr = [{a:1},{a:1},{a:2},{a:3},{a:2}]

Array.prototype.unique = function (){
     return [...new Set(this.map(a=>JSON.stringify(a)))].map(a=>JSON.parse(a))
}

arr.unique()
使用indexOf的方式去重 需同一地址下
Array.prototype.unique = function(){
  const result = [] 
  this.forEach( v =>{
    if(result.indexOf < 0 ){
      result.push(v)
    }
  })
  return result
}
使用hash的方式去重
Array.prototype.unique = function() {
  const hash = {}
  const arr = []
  let len = this.length
  for (let i = 0; i < len; i++) {
    if (!hash[this[i]]) {
      hash[this[i]] = 'unqiue'
      arr.push(this[i])
    }
  }
  return arr
}

算法排序
Array.prototype.quickSort = function (){  //只可以排整數(shù)
  return this.sort(function(a,b){
    return a - b
  })
}

冒泡排序
Array.prototype.popSort = function (){
  let max = this.length - 1
  for(let i = 0 ; i < max ; i++){
    //循環(huán)控制比較多少輪
    for(let j = 0 ; j < max - i ; j++){
      //用于和上一層做比較
      if(this[j] > this[j + 1]){
        let temp = this[j]
        this[j] = this[j + 1]
        this[j + 1] = temp
      }
    }
  }
  return this
}
對象里的number排序
arr = [
        {time: 19850813},
        {time: 1565798524164},
        {time: 15657985206},
        {time: 156579851}
      ]
arr.sort((a,b)=>{
    return a.time < b.time ? 1 : -1
})

集合取交集


        Array.intersect = function () {
            var result = new Array();
            var obj = {};
            for (var i = 0; i < arguments.length; i++) {
                for (var j = 0; j < arguments[i].length; j++) {
                    var str = arguments[i][j];
                    if (!obj[str]) {
                        obj[str] = 1;
                    }
                    else {
                        obj[str]++;
                        if (obj[str] == arguments.length)
                        {
                            result.push(str);
                        }
                    }//end else
                }//end for j
            }//end for i
            return result;
        }

集合去掉重復(fù)

         Array.prototype.uniquelize = function () {
            var tmp = {},
                ret = [];
            for (var i = 0, j = this.length; i < j; i++) {
                if (!tmp[this[i]]) {
                    tmp[this[i]] = 1;
                    ret.push(this[i]);
                }
            }

            return ret;
        }

并集

        Array.union = function () {
            var arr = new Array();
            var obj = {};
            for (var i = 0; i < arguments.length; i++) {
                for (var j = 0; j < arguments[i].length; j++)
                {
                    var str=arguments[i][j];
                    if (!obj[str])
                    {
                        obj[str] = 1;
                        arr.push(str);
                    }
                }//end for j
            }//end for i
            return arr;
        }

2個(gè)集合的差集 在arr不存在

        Array.prototype.minus = function (arr) {
            var result = new Array();
            var obj = {};
            for (var i = 0; i < arr.length; i++) {
                obj[arr[i]] = 1;
            }
            for (var j = 0; j < this.length; j++) {
                if (!obj[this[j]])
                {
                    obj[this[j]] = 1;
                    result.push(this[j]);
                }
            }
            return result;
        };
        console.log(Array.intersect(["1", "2", "3"], ["2", "3", "4", "5", "6"]));//[2,3]
        console.log([1, 2, 3, 2, 3, 4, 5, 6].uniquelize());//[1,2,3,4,5,6]
        console.log(Array.union(["1", "2", "3"], ["2", "3", "4", "5", "6"], ["5", "6", "7", "8", "9"]))
        console.log(["2", "3", "4", "5", "6"].minus(["1", "2", "3"]));

降維數(shù)組

function dee(a){
    var c = Array.prototype.concat.apply([],a)
    var sum = JSON.stringify(c).match(/\[/g).length
    if(sum === 1){
        return c
    }else{
        dee(c)
    }
}

every

對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù),如果每一項(xiàng)都滿足條件則返回true,否則返回false;

var numbers = [1,2,3,4,5,4,3,2,1]; 
var result = numbers.every((item,index,array) => {
    return item >2 ;
});
 alert(result ); //false

some

對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù),如果任意一項(xiàng)滿足條件則返回true,否則返回false;

var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.some(function(item,index,array){
    return item>2;
}); 
alert(everyResult); //true

filter

對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù)判斷,返回滿足函數(shù)條件的項(xiàng)組成的數(shù)組

var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.filter(function(item,index,array){
    return item>2;
}); 
alert(everyResult); //  [3,4,5,4,3]

map

對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù),返回執(zhí)行后的結(jié)果組成的數(shù)組

var numbers = [1,2,3,4,5,4,3,2,1]; 
var everyResult = numbers.map(function(item,index,array){
    return item*2;
}); 
alert(everyResult); //  [2, 4, 6, 8, 10, 8, 6, 4, 2]

forEach

遍歷數(shù)組,類似for循環(huán)

var numbers = [1,2,3,4,5,4,3,2,1]; 
numbers.forEach(function(item,index,array){ 
    if(item!=2){ //如果不是2
        numbers.splice(index,1,2); //替換成2
    } 
}); 
alert(numbers); //  [2, 2, 2, 2, 2, 2, 2, 2, 2]

reduce && reduceRight

這兩個(gè)方法迭代數(shù)組所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。
reduce從左到右,reduceRight從右到左。

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
    return prev + cur;
});
alert(sum); //15

檢測數(shù)組instanceof && array.isArray

var values = [1,2,3];
if(values instanceof Array){
    //對數(shù)組進(jìn)行某些操作
}
if(Array.isArray(values)){
    //對數(shù)組進(jìn)行某些操作
}

join

將數(shù)組轉(zhuǎn)換成字符串,且用分隔符分隔

var colors = [1,2,3];
alert(colors.join("|"));  // 1|2|3

toString

將數(shù)組轉(zhuǎn)換成字符串

var color = [1,2,3];
console.log(color.toString());// 1,2,3

valueOf

將數(shù)組轉(zhuǎn)換成字符串,返回?cái)?shù)組值

var color = [1,2,3,4];
console.log(color.valueOf());//1,2,3,4

push && pop && shift && unshift

push() 從數(shù)組末尾添加
pop() 從數(shù)組末尾移除
shift() 從數(shù)組前端移除
unshift() 從數(shù)組前端添加


reverse

反轉(zhuǎn)數(shù)組,返回?cái)?shù)組

var color = [1,2,3,4,5];
console.log(color.reverse());//[5, 4, 3, 2, 1]
console.log(Array.isArray(color.reverse()));//true

sort

排序返回?cái)?shù)組,默認(rèn)是升序,

var color = [1,2,3,4,5];
var color2 = color.sort((a,b) => {
    return b-a; //降序
    //return a-b;升序
    //retun 是 負(fù)數(shù);
});
console.log(color2);
// [5, 4, 3, 2, 1]

concat

用于復(fù)制或者從尾部添加–>創(chuàng)建新數(shù)組
先創(chuàng)建一個(gè)當(dāng)前數(shù)組的副本,然后將添加的數(shù)組添加到末尾,返回新的數(shù)組。如果沒有傳參數(shù),直接復(fù)制返回新構(gòu)建的數(shù)組。

var values = [1,2,3]; 
var v1 = values.concat();
var v2 = values.concat(4); 
console.log(values); //[1,2,3];
console.log(v1); //[1,2,3] 
console.log(v2); //[1,2,3,4]

splice

splice() 方法用于插入、刪除或替換數(shù)組的元素。

array.splice(index,num,arr);
//返回被刪除的元素
/**
*index:修改的位置即下標(biāo)數(shù)字
*num:刪除的長度,默認(rèn)是至結(jié)尾
*arr:添加進(jìn)去的數(shù)組
**/
//刪除demo:
var values = [1,2,3,4,5,6];
var v = values.splice(0,2);
console.log(values);  //[3,4,5,6]
console.log(v);       //[1,2]

//插入demo: 
var values = [1,2,3,4,5,6]; 
var v1 = values.splice(1,0,1,1,1); 
console.log(values); //[1,1,1,1,2,3,4,5,6] 
console.log(v1); //[] 

//替換demo: 
var values = [1,2,3,4,5,6]; 
var v1 = values.splice(1,2,1,1,1); 
console.log(values); //[1,1,1,1,4,5,6] 
console.log(v1); //[2,3]

slice

用于復(fù)制或截取數(shù)組–>創(chuàng)建新數(shù)組,截取當(dāng)前數(shù)組的一部分創(chuàng)建一個(gè)新數(shù)組??梢越邮芤粋€(gè)或者兩個(gè)參數(shù),只有一個(gè)參數(shù)時(shí)返回指定位置到尾部的數(shù)組。兩個(gè)參數(shù)時(shí),返回指定位置到結(jié)束位置之前但不包括結(jié)束位置的數(shù)組。

var values = [1,2,3]; 
var v1 = values.slice(); 
var v2 = values.slice(1); 
var v3 = values.slice(1,3); 
console.log(values); //[1,2,3] 
console.log(v1); //[1,2,3] 
console.log(v2); //[2,3] 
console.log(v3); //[2,3]

indexOf && lastIndexOf

返回元素在數(shù)組的位置

var values = [1,2,3,4,5];
indexOf() 從頭找指定項(xiàng)的位置
var v1 = values.indexOf(3);

lastIndexOf() 從后往前查位置
var v2 = values.lastIndexOf(3);

兩者如果沒查到都返回-1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容