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

JS對象去重的多種方式小結(jié)

 更新時間:2024年09月25日 08:50:36   作者:魚櫻前端  
在 JavaScript 中,對象的去重通常是指在一個對象數(shù)組中,根據(jù)某些屬性值去掉重復(fù)的對象,本文給大家總結(jié)了一些JS對象去重的多種方式,并通過代碼示例講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下

ES5 方式

在 ES5 中,我們可以使用 for 循環(huán)配合數(shù)組方法來實現(xiàn)對象數(shù)組的去重。

function uniqueArrayByProperty(array, property) {
  var seen = {};
  return array.filter(function(item) {
    var val = item[property];
    return seen.hasOwnProperty(val) ? false : (seen[val] = true);
  });
}

var arr = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Alice' }, // 重復(fù)
  { id: 3, name: 'Charlie' }
];

var uniqueArr = uniqueArrayByProperty(arr, 'id');
console.log(uniqueArr);
// 輸出:[ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' } ]

ES6 及之后的方式

隨著 ES6 的引入,有了更多簡潔的方式來處理數(shù)組和對象。

使用 Set 和 JSON.stringify / JSON.parse

這種方法適用于簡單對象,但需要注意 JSON.stringify 會丟失原型鏈上的屬性,而且對于包含循環(huán)引用的對象會拋出錯誤。

function uniqueArrayByPropertyES6(array, property) {
  const seen = new Set();
  return array.filter(item => {
    const val = JSON.stringify(item[property]);
    return seen.has(val) ? false : seen.add(val);
  });
}

var uniqueArrES6 = uniqueArrayByPropertyES6(arr, 'id');
console.log(uniqueArrES6);

使用 Map

對于更復(fù)雜的對象去重,可以使用 Map 來存儲已經(jīng)見過的對象。

function uniqueArrayByPropertyWithMap(array, property) {
  const map = new Map();
  return array.filter(item => {
    const val = item[property];
    if (!map.has(val)) {
      map.set(val, true);
      return true;
    }
    return false;
  });
}

var uniqueArrWithMap = uniqueArrayByPropertyWithMap(arr, 'id');
console.log(uniqueArrWithMap);

使用 Map 結(jié)合自定義比較邏輯

這種方法適用于對象具有多個屬性的情況,可以自定義比較邏輯。

function uniqueArrayByProperties(array, properties) {
  const seen = new Map();
  return array.filter(item => {
    const key = properties.map(prop => item[prop]).join('|');
    if (!seen.has(key)) {
      seen.set(key, true);
      return true;
    }
    return false;
  });
}

const arr = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Alice' }, // 重復(fù)
  { id: 3, name: 'Charlie' }
];

const uniqueArr = uniqueArrayByProperties(arr, ['id', 'name']);
console.log(uniqueArr);
// 輸出:[ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' } ]

使用 Lodash 庫

Lodash 提供了一個方便的函數(shù) _.uniqBy,可以輕松實現(xiàn)去重。

const _ = require('lodash');

const uniqueArr = _.uniqBy(arr, 'id');
console.log(uniqueArr);
// 輸出:[ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' } ]

使用 WeakMap

WeakMap 可以用來存儲對象引用,而不會阻止這些對象被垃圾回收。雖然 WeakMap 的鍵必須是對象,但它可以用來存儲已經(jīng)處理過的對象。

function uniqueArrayByPropertyWithWeakMap(array, property) {
  const seen = new WeakMap();
  return array.filter(item => {
    const val = item[property];
    if (!seen.has(val)) {
      seen.set(val, true);
      return true;
    }
    return false;
  });
}

const uniqueArrWithWeakMap = uniqueArrayByPropertyWithWeakMap(arr, 'id');
console.log(uniqueArrWithWeakMap);
// 輸出:[ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' } ]

使用 Set 和 WeakRef (實驗性)

在最新的 JavaScript 版本中,WeakRef 可以用來存儲對象的弱引用,這可以用來輔助對象的去重,但請注意 WeakRef 是一個實驗性功能,可能在未來的版本中有所變化。

const { WeakRef } = require('weakref'); // 假設(shè)這是一個支持 WeakRef 的環(huán)境

function uniqueArrayByPropertyWithWeakRef(array, property) {
  const seen = new Set();
  return array.filter(item => {
    const ref = new WeakRef(item[property]);
    if (!seen.has(ref)) {
      seen.add(ref);
      return true;
    }
    return false;
  });
}

const uniqueArrWithWeakRef = uniqueArrayByPropertyWithWeakRef(arr, 'id');
console.log(uniqueArrWithWeakRef);
// 輸出:[ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' } ]

使用 Set 結(jié)合 JSON.stringify

對于簡單對象,可以使用 JSON.stringify 來生成對象的字符串表示,然后使用 Set 進行去重。

function uniqueArrayByPropertyWithSet(array, property) {
  const seen = new Set();
  return array.filter(item => {
    const val = JSON.stringify(item[property]);
    return seen.has(val) ? false : seen.add(val);
  });
}

const uniqueArrWithSet = uniqueArrayByPropertyWithSet(arr, 'id');
console.log(uniqueArrWithSet);
// 輸出:[ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' } ]

總結(jié)

以上列出了一些實現(xiàn) JavaScript 對象數(shù)組去重的不同方法(項目中經(jīng)常出現(xiàn)這樣的需求數(shù)組對象去重)。選擇哪種方法取決于你的具體需求和環(huán)境。對于簡單的對象,使用 Set 和 JSON.stringify 可能是最簡單的方式;而對于更復(fù)雜的情況,使用 Map 或者 WeakMap 可能更合適。如果使用第三方庫,Lodash 的 _.uniqBy 函數(shù)提供了便捷的解決方案。對于實驗性的功能,如 WeakRef,則需要考慮兼容性和穩(wěn)定性問題。

以上就是JS對象去重的多種方式小結(jié)的詳細內(nèi)容,更多關(guān)于JS對象去重的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS實現(xiàn)簡易貪吃蛇游戲

    JS實現(xiàn)簡易貪吃蛇游戲

    這篇文章主要為大家詳細介紹了JS實現(xiàn)簡易貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 利用chrome瀏覽器進行js調(diào)試并找出元素綁定的點擊事件詳解

    利用chrome瀏覽器進行js調(diào)試并找出元素綁定的點擊事件詳解

    “工欲善其事,必先利其器” 恩,這句話我覺得說的特別有道理,下面這篇文章主要給大家介紹了關(guān)于利用chrome瀏覽器進行js調(diào)試并找出元素綁定的點擊事件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • JavaScript中instanceof運算符的用法總結(jié)

    JavaScript中instanceof運算符的用法總結(jié)

    這篇文章主要是對JavaScript中instanceof運算符的用法進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • 淺談Webpack4 Tree Shaking 終極優(yōu)化指南

    淺談Webpack4 Tree Shaking 終極優(yōu)化指南

    這篇文章主要介紹了淺談Webpack4 Tree Shaking 終極優(yōu)化指南,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 微信小程序?qū)崿F(xiàn)收縮式菜單

    微信小程序?qū)崿F(xiàn)收縮式菜單

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)收縮式菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 微信小程序接入vant Weapp組件的詳細步驟

    微信小程序接入vant Weapp組件的詳細步驟

    這篇文章主要介紹了微信小程序接入vant Weapp組件的詳細步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 使用JavaScript計算前一天和后一天的思路詳解

    使用JavaScript計算前一天和后一天的思路詳解

    這篇文章主要介紹了使用JavaScript計算前一天和后一天的思路,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 如何利用JavaScript實現(xiàn)二叉搜索樹

    如何利用JavaScript實現(xiàn)二叉搜索樹

    這篇文章主要給大家介紹了關(guān)于如何利用JavaScript實現(xiàn)二叉搜索樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • javascript bind綁定函數(shù)代碼

    javascript bind綁定函數(shù)代碼

    bind函數(shù),顧名思義,用于為調(diào)用函數(shù)綁定一個作用域,因為this很容易跟丟它原來所在的作用域,直接指向頂層的window對象。
    2010-01-01
  • javascript 控制input只允許輸入的各種指定內(nèi)容

    javascript 控制input只允許輸入的各種指定內(nèi)容

    這篇文章主要介紹了通過javascript控制input只允許輸入的各種指定內(nèi)容,需要的朋友可以參考下
    2014-06-06

最新評論

岢岚县| 乳源| 璧山县| 专栏| 肇源县| 酒泉市| 黄冈市| 中宁县| 牙克石市| 哈巴河县| 龙泉市| 财经| 敖汉旗| 沭阳县| 鄂州市| 白玉县| 上饶市| 龙岩市| 东莞市| 英山县| 敖汉旗| 平顶山市| 荣昌县| 天台县| 襄樊市| 新疆| 铜川市| 美姑县| 丹凤县| 休宁县| 浦东新区| 浙江省| 东平县| 鹿泉市| 自治县| 宁海县| 个旧市| 宣化县| 五寨县| 卓尼县| 高碑店市|