欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

11種JavaScript前端數(shù)據(jù)去重方式總結(jié)

 更新時(shí)間:2023年06月12日 11:42:48   作者:jenemy  
這篇文章主要為大家總結(jié)了JavaScript去重的11種方式,各有優(yōu)缺點(diǎn),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以根據(jù)需求合理使用

1.使用 for 循環(huán)和 indexOf 方法,復(fù)雜度 O(n^2)

function uniqueArray(arr) {
  const result = []
  for (let i = 0; i < arr.length; i++) {
    if (result.indexOf(arr[i]) === -1) {
      result.push(arr[i])
    }
  }
  return result
}

2.使用 for 循環(huán)和對(duì)象,復(fù)雜度 O(n^2)

function uniqueArray(arr) {
  const result = []
  const obj = {}
  for (let i = 0; i < arr.length; i++) {
    if (!obj[arr[i]]) {
      result.push(arr[i])
      obj[arr[i]] = true
    }
  }
  return result
}

3.使用 filter 方法和 indexOf 方法,復(fù)雜度 O(n^2)

function uniqueArray(arr) {
  return arr.filter((item, index, arr) => arr.indexOf(item) === index)
}

4.使用 filter 方法和對(duì)象,復(fù)雜度 O(n)

function uniqueArray(arr) {
  const obj = {}
  return arr.filter((item) => obj.hasOwnProperty(item) ? false : (obj[item] = true))
}

5.使用 Set 數(shù)據(jù)結(jié)構(gòu),復(fù)雜度 O(n)

function uniqueArray(arr) {
  return Array.from(new Set(arr))
}

// 使用解構(gòu) + Set
function uniqueArray(arr) {
  return [...new Set(arr)]
}

6.使用 Map 數(shù)據(jù)結(jié)構(gòu),復(fù)雜度 O(n)

function uniqueArray(arr) {
  const map = new Map();
  const result = [];
  for (let i = 0; i &lt; arr.length; i++) {
    if (!map.has(arr[i])) {
      map.set(arr[i], true);
      result.push(arr[i]);
    }
  }
  return result;
}

// or
function uniqueArray(arr) {
  const map = new Map();
  return arr.filter(function(item) {
    return !map.has(item) &amp;&amp; map.set(item, true);
  });
}

7.使用雙重循環(huán)和 splice 方法,復(fù)雜度 O(n^2)

function uniqueArray(arr) {
  for (var i = 0; i &lt; arr.length; i++) {
    for (var j = i + 1; j &lt; arr.length; j++) {
      if (arr[i] === arr[j]) {
        arr.splice(j, 1);
        j--;
      }
    }
  }
  return arr;
}

8.使用排序和雙指針

使用排序和雙指針可以實(shí)現(xiàn) O(nlogn) 的時(shí)間復(fù)雜度。先對(duì)數(shù)組進(jìn)行排序,然后使用雙指針遍歷數(shù)組,如果左指針和右指針指向的值相同,就把右指針向右移動(dòng),直到找到不同的值,然后把左指針向右移動(dòng),繼續(xù)遍歷。

function uniqueArray(arr) {
  arr.sort();
  var left = 0, right = 1;
  var result = [];
  while (right &lt;= arr.length) {
    if (arr[left] === arr[right]) {
      right++;
    } else {
      result.push(arr[left]);
      left = right;
      right++;
    }
  }
  return result;
}

9.使用 reduce 方法和 includes,復(fù)雜度 O(n^2)

function uniqueArray(arr) {
  return arr.reduce(function(prev, cur) {
    if (!prev.includes(cur)) {
      prev.push(cur);
    }
    return prev;
  }, []);
}

10.使用遞歸和 includes,復(fù)雜度 O(n^2)

function uniqueArray(arr) {
  if (arr.length === 1) {
    return arr;
  } else {
    const first = arr[0];
    const rest = uniqueArray(arr.slice(1));
    if (rest.includes(first)) {
      return rest;
    } else {
      return [first].concat(rest);
    }
  }
}

11.雙層循環(huán),復(fù)雜度 O(n^2)

function uniqueArray(arr) {
  var result = [];
  for (var i = 0; i &lt; arr.length; i++) {
    for (var j = 0; j &lt; result.length; j++) {
      if (arr[i] === result[j]) {
        break;
      }
    }
    if (j === result.length) {
      result.push(arr[i]);
    }
  }
  return result;
}

到此這篇關(guān)于11種JavaScript前端數(shù)據(jù)去重方式總結(jié)的文章就介紹到這了,更多相關(guān)JavaScript數(shù)據(jù)去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js對(duì)數(shù)字的格式化使用說明

    js對(duì)數(shù)字的格式化使用說明

    Javascript也提供了對(duì)數(shù)字進(jìn)行格式化輸出的支持,需要的朋友可以參考下。
    2011-01-01
  • Javascript跨域請(qǐng)求的4種解決方式

    Javascript跨域請(qǐng)求的4種解決方式

    如果所請(qǐng)求的域名跟這個(gè)域名不致,這種情況就是跨域,由于跨域存在漏洞,所以一般來說正常的跨域請(qǐng)求方式是請(qǐng)求不到的,所以有了本文的出現(xiàn),感興趣的你可以參考下哈,希望可以幫助到你
    2013-03-03
  • Layui表格監(jiān)聽行單雙擊事件講解

    Layui表格監(jiān)聽行單雙擊事件講解

    今天小編就為大家分享一篇Layui表格監(jiān)聽行單雙擊事件講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • JavaScript模擬鼠標(biāo)右鍵菜單效果

    JavaScript模擬鼠標(biāo)右鍵菜單效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript模擬鼠標(biāo)右鍵菜單效果的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 原生javascript實(shí)現(xiàn)自動(dòng)更新的時(shí)間日期

    原生javascript實(shí)現(xiàn)自動(dòng)更新的時(shí)間日期

    這篇文章主要介紹了原生javascript實(shí)現(xiàn)自動(dòng)更新的時(shí)間日期的相關(guān)資料,對(duì)實(shí)現(xiàn)代碼進(jìn)行詳細(xì)分析,感興趣的朋友可以參考一下
    2016-02-02
  • js改變鼠標(biāo)的形狀和樣式的方法

    js改變鼠標(biāo)的形狀和樣式的方法

    常用的改變鼠標(biāo)樣式的方法:如果你想鼠標(biāo)移動(dòng)到某個(gè)元素上改變鼠標(biāo)樣式 就在這個(gè)元素的樣式里加上 cursor:(你想改的樣式)
    2014-03-03
  • 用Javascript實(shí)現(xiàn)Windows任務(wù)管理器的代碼

    用Javascript實(shí)現(xiàn)Windows任務(wù)管理器的代碼

    在Windows系統(tǒng)上,自從98系統(tǒng)以來就提供了腳本宿主(Windows Scripting Host 簡(jiǎn)稱WSH)的功能,WSH可以加載并運(yùn)行JS和VBS腳本,并支持調(diào)用系統(tǒng)的COM組件,在COM組件的支持下腳本可以輕松實(shí)現(xiàn)非常強(qiáng)大的功能
    2012-03-03
  • Js的MessageBox效果代碼

    Js的MessageBox效果代碼

    看到論壇上有人模仿alert,自己也寫了一個(gè)。 本來想模仿winapi里的MessageBox 但可惜js 不支持,阻塞模式。
    2008-05-05
  • 善用事件代理,警惕閉包的性能陷阱。

    善用事件代理,警惕閉包的性能陷阱。

    關(guān)于JS性能優(yōu)化中的冰山一角:事件代理、警惕閉包。其實(shí)本文有一個(gè)文章已經(jīng)說到,閉包如何產(chǎn)生,閉包的作用;
    2011-01-01
  • JavaScript計(jì)時(shí)器示例分析

    JavaScript計(jì)時(shí)器示例分析

    這篇文章主要介紹了JavaScript計(jì)時(shí)器示例分析,需要的朋友可以參考下
    2015-02-02

最新評(píng)論