最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

11種JavaScript前端數據去重方式總結

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

1.使用 for 循環(huán)和 indexOf 方法,復雜度 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)和對象,復雜度 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 方法,復雜度 O(n^2)

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

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

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

5.使用 Set 數據結構,復雜度 O(n)

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

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

6.使用 Map 數據結構,復雜度 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 方法,復雜度 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.使用排序和雙指針

使用排序和雙指針可以實現 O(nlogn) 的時間復雜度。先對數組進行排序,然后使用雙指針遍歷數組,如果左指針和右指針指向的值相同,就把右指針向右移動,直到找到不同的值,然后把左指針向右移動,繼續(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,復雜度 O(n^2)

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

10.使用遞歸和 includes,復雜度 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),復雜度 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;
}

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

相關文章

  • 微信小程序支付包含uniapp方法超詳細講解

    微信小程序支付包含uniapp方法超詳細講解

    微信小程序支付流程涉及多個步驟和多個參與方的交互,下面這篇文章主要介紹了微信小程序支付包含uniapp方法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07
  • TypeScript判斷兩個數組的內容是否相等的實現

    TypeScript判斷兩個數組的內容是否相等的實現

    本文主要介紹了TypeScript?判斷兩個數組的內容是否相等,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • Echarts自定義地圖和添加圖標代碼示例

    Echarts自定義地圖和添加圖標代碼示例

    這篇文章主要給大家介紹了關于Echarts自定義地圖和添加圖標的相關資料,項目中經常會遇到需要渲染echarts地圖的情況,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • bootstrap Table的使用方法總結

    bootstrap Table的使用方法總結

    這篇文章主要為大家詳細介紹了bootstrap Table的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Javascript如何理解全國甲卷高考作文

    Javascript如何理解全國甲卷高考作文

    這篇文章主要介紹了Javascript如何理解全國甲卷高考作文,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • WebGL 顏色與紋理使用介紹

    WebGL 顏色與紋理使用介紹

    這篇文章主要為大家介紹了WebGL 顏色與紋理使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • javascript事件冒泡和事件捕獲詳解

    javascript事件冒泡和事件捕獲詳解

    最近在學習javascript中遇到了一些困難,比如冒泡和捕獲,很多次被提到,但又不知究竟應用在何處。找到了一些好文章解惑,在這里分享給大家。
    2015-05-05
  • JS時間戳與日期格式的轉換小結

    JS時間戳與日期格式的轉換小結

    這篇文章主要介紹了JS時間戳與日期格式的轉換小結,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • JavaScript如何實現防止重復的網絡請求的示例

    JavaScript如何實現防止重復的網絡請求的示例

    這篇文章主要介紹了JavaScript如何實現防止重復的網絡請求的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • JavaScript DOM實現簡單留言板

    JavaScript DOM實現簡單留言板

    這篇文章主要為大家詳細介紹了JavaScript DOM實現簡單留言板,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

神池县| 克拉玛依市| 汶川县| 河间市| 潜江市| 天镇县| 龙门县| 海宁市| 石狮市| 九寨沟县| 桐梓县| 疏附县| 隆安县| 道孚县| 托里县| 卢湾区| 朝阳市| 饶平县| 土默特左旗| 卓尼县| 新密市| 兴安县| 马边| 焉耆| 黑河市| 山东省| 客服| 合作市| 灵武市| 玉门市| 土默特左旗| 神农架林区| 伊吾县| 奉化市| 湟中县| 广宁县| 兴城市| 吴旗县| 高青县| 涡阳县| 常德市|