成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

好像不是最全的數(shù)組去重方法

AnthonyHan / 2142人閱讀

摘要:最簡(jiǎn)單粗暴地方式,兩重循環(huán)兩個(gè)因?yàn)閮蓚€(gè)因?yàn)榕判颍绻嗤蜁?huì)挨著先放數(shù)組第一個(gè)元素?zé)o法判斷對(duì)象對(duì)象數(shù)組去重方法補(bǔ)充我想說(shuō)一下與相同點(diǎn)他們都是用來(lái)遍歷數(shù)組的。不同點(diǎn)能有返回值,沒(méi)有返回值。

這一篇文章,我們講解一下數(shù)組去重。

1.最簡(jiǎn)單粗暴地方式,兩重for循環(huán)

let arr = [9, 5, 6, 5, "1", "1", true, 5, true];
for (var i = 0; i < arr.length; i++) {
    for (var j = i + 1; j < arr.length; j++) {
        if(arr[i] === arr[j]){
            arr.splice(j,1);
        }       
    }
}
console.log(arr); // [9, 5, 6, "1", true, undefined, null, NaN, NaN, {…}, {…}]
// 兩個(gè)NaN, 因?yàn)镹aN!=NaN

2.indexOf

let a = [];
for (var i = 0; i < arr.length; i++) {
    if(a.indexOf(arr[i]) === -1){
        a.push(arr[i]);
    }
}
console.log(a); // [9, 5, 6, "1", true, undefined, null, NaN, NaN, {…}, {…}]
// 兩個(gè)NaN, 因?yàn)镹aN!=NaN

3.includes

for (var i = 0; i < arr.length; i++) {
    if(!a.includes(arr[i])){
        a.push(arr[i]);
    }
}
console.log(a); // [9, 5, 6, "1", true, undefined, null, NaN, {…}, {…}]

4.Set

let a = [...(new Set(arr))];
console.log(a); // [9, 5, 6, "1", true, undefined, null, NaN, {…}, {…}]

5.filter

let a = arr.filter(function(value, index){
    return arr.indexOf(value, 0) === index;
})
console.log(a);// [9, 5, 6, "1", true, undefined, null, {…}, {…}]
arr.filter(function(value){
    return a.indexOf(value) === -1 ? a.push(value) : a;
})
console.log(a);// [9, 5, 6, "1", true, undefined, null, NaN, NaN, {…}, {…}]

6.sort

arr = arr.sort(); // 排序,如果相同就會(huì)挨著
a.push(arr[0]); // 先放數(shù)組第一個(gè)元素
for (var i = 1; i < arr.length; i++) {
    if(arr[i] !== arr[i - 1]){
        a.push(arr[i]);
    }
}

7.reduce

arr = arr.sort(); 
arr.reduce(function(preVal, nowVal){
    if(preVal !== nowVal){
        a.push(preVal);
    }
    return nowVal;
}, a)
arr.reduce(function(preVal, nowVal){
    return a.indexOf(nowVal) === -1 ? a.push(nowVal) : a;
}, a)
console.log(a); //["1", 5, 6, 9, NaN, NaN, {…}, {…}, null, true, undefined]

8.hasOwnProperty

let obj = {};
for (var i = 0; i < arr.length; i++) {
    if(!obj.hasOwnProperty(obj[typeof arr[i] + arr[i]])){
        obj[typeof arr[i] + arr[i]] = arr[i];
    }
}
console.log(Object.values(obj)); //[9, 5, 6, "1", true, undefined, null, NaN, {…}] 無(wú)法判斷對(duì)象

9.對(duì)象數(shù)組去重方法

let obj = {};
for (var i = 0; i < arr.length; i++) {
    if(!obj[typeof arr[i] + arr[i]]){
        obj[typeof arr[i] + arr[i]] = arr[i];
    }
}
console.log(Object.values(obj)); //[9, 5, 6, "1", true, undefined, null, NaN, {…}]

10.Map

let map = new Map();
for (var i = 0; i < arr.length; i++) {
    if(!map.get(arr[i])){
        map.set(arr[i], arr[i]);
    }
}
console.log(map);

補(bǔ)充

我想說(shuō)一下forEach與map

arr.forEach( function(element, index) {
    console.log(element);
});
arr.map(function(element, index){
    console.log(element);
});

相同點(diǎn)

他們都是用來(lái)遍歷數(shù)組的。

不同點(diǎn)

map能有返回值,forEach沒(méi)有返回值。

let arr = [9,3,6,3,6,3];
arr = arr.forEach( function(element, index) {
    return element + 1;
});
console.log(arr); // undefined
arr = arr.map(function(element, index){
    return element + 1;
});
console.log(arr); //[10, 4, 7, 4, 7, 4]

forEach不能中途打斷

let arr = [9,3,6,3,6,3];
arr.forEach( function(element, index) {
    console.log(element);
    if(index === 2){
        return; //沒(méi)用,break,continue會(huì)報(bào)錯(cuò)是無(wú)效的
    }
});

forEach模擬實(shí)現(xiàn)

Array.prototype.bforEach = function (fn) {
    let array = this;
    for (var i = 0; i < array.length; i++) {
        fn(array[i], i, array);
    }
}
arr.bforEach(function(element, index){
    console.log(element); // 9, 3, 6, 3, 6, 3
});

map模擬實(shí)現(xiàn)

Array.prototype.Map = function (fn) {
    let array = this,
        a = [],
        r;
    for (var i = 0; i < array.length; i++) {
        r = fn(array[i], i, array);
        a.push(r);
    }
    return a;
}

喜歡的可以點(diǎn)一個(gè)贊,或者關(guān)注一下。鼓勵(lì)一下一名自學(xué)前端的大學(xué)生。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100700.html

相關(guān)文章

  • JavaScript數(shù)組去重(12種方法,史上最全

    摘要:數(shù)組去重,一般都是在面試的時(shí)候才會(huì)碰到,一般是要求手寫(xiě)數(shù)組去重方法的代碼。如果是被提問(wèn)到,數(shù)組去重的方法有哪些你能答出其中的種,面試官很有可能對(duì)你刮目相看。數(shù)組去重的方法一利用去重中最常用不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般都是在面試的時(shí)候才會(huì)碰到,一般是要求手寫(xiě)數(shù)組去重方法的代碼。如果是被提問(wèn)到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對(duì)你刮目相看...

    rozbo 評(píng)論0 收藏0
  • 最全數(shù)組去重方法對(duì)比

    摘要:本文最早發(fā)布于,為原創(chuàng)常規(guī)方法兩種數(shù)組深拷貝,為不了影響原來(lái)的數(shù)組第一種方法常用但是有坑碰到這種情況就出問(wèn)題了第二種方法使用,方法返回的結(jié)果并不一定是升序,主要目的是將重復(fù)的數(shù)字排到一起使用的方法兩種簡(jiǎn)潔優(yōu)雅版奇技淫巧更新看到評(píng)論 本文最早發(fā)布于csdn,為原創(chuàng) 常規(guī)方法兩種 let json = arr => { let res = [], obj = {};...

    BlackHole1 評(píng)論0 收藏0
  • JS類(lèi)型判斷、對(duì)象克隆、數(shù)組克隆

    摘要:對(duì)象克隆我們經(jīng)常會(huì)用到一個(gè)對(duì)象去做一些事情,可能有時(shí)候我們不想改變?cè)械臄?shù)據(jù)。如果是對(duì)象接著遞歸復(fù)制判斷是對(duì)象還是數(shù)組其實(shí)這還不是最終的深克隆,因?yàn)檫@一個(gè)也有它自己的問(wèn)題,但是面對(duì)一般的情況應(yīng)該沒(méi)問(wèn)題,跟高級(jí)的用法請(qǐng)自行學(xué)習(xí)。 類(lèi)型判斷 我們先說(shuō)一下JS的數(shù)據(jù)類(lèi)型,我們一般說(shuō)JS有六大數(shù)據(jù)類(lèi)型(ES6以前)分別是: 基本數(shù)據(jù)類(lèi)型 Number String Boolean nul...

    dreamtecher 評(píng)論0 收藏0
  • js數(shù)組去重幾種方法

    摘要:三種方法利用判斷新數(shù)組中實(shí)際上也是使用的類(lèi)似的傳入數(shù)組如果當(dāng)前數(shù)組的第已經(jīng)保存進(jìn)了臨時(shí)數(shù)組,那么跳過(guò),否則把當(dāng)前項(xiàng)到臨時(shí)數(shù)組里面利用判斷舊數(shù)組結(jié)果數(shù)組如果當(dāng)前數(shù)組的第項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是,那么表示第項(xiàng)是重復(fù)的,忽略掉。 三種方法 利用indexOf判斷新數(shù)組 underscore.js中實(shí)際上也是使用的類(lèi)似的indexOf //傳入數(shù)組 functio...

    mykurisu 評(píng)論0 收藏0
  • 史上最全 Python 3 類(lèi)型轉(zhuǎn)換指南

    摘要:支持轉(zhuǎn)換為類(lèi)型的,僅有,其他類(lèi)型均不支持。如果中含有正負(fù)號(hào)數(shù)字和小數(shù)點(diǎn)以外的字符,則不支持轉(zhuǎn)換。轉(zhuǎn)換時(shí),會(huì)自動(dòng)添加虛數(shù)部分并以表示。轉(zhuǎn)換會(huì)直接完全轉(zhuǎn)換。轉(zhuǎn)換列表,會(huì)取每個(gè)字節(jié)的十進(jìn)制值并組合成列表轉(zhuǎn)換為比較簡(jiǎn)單。 int 支持轉(zhuǎn)換為 int 類(lèi)型的,僅有 float、str、bytes,其他類(lèi)型均不支持。 float -> int 會(huì)去掉小數(shù)點(diǎn)及后面的數(shù)值,僅保留整數(shù)部分。 int(-...

    libxd 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<