资讯专栏INFORMATION COLUMN

js 数组去重(单元素和对象数组)

reclay / 3388人阅读

摘要:源码方案,旧方案方案,相比方案一,少了一层循环,提高效率,逻辑更加清晰使用方法

源码

</>复制代码

  1. //方案1,旧方案
  2. Array.prototype.unique = function(key) {
  3. var arr = this;
  4. var n = [arr[0]];
  5. for (var i = 1; i < arr.length; i++) {
  6. if (key === undefined) {
  7. if (n.indexOf(arr[i]) == -1) n.push(arr[i]);
  8. } else {
  9. inner: {
  10. var has = false;
  11. for (var j = 0; j < n.length; j++) {
  12. if (arr[i][key]!==undefined && arr[i][key] === n[j][key]) {
  13. has = true;
  14. break inner;
  15. }
  16. }
  17. }
  18. if (!has) {
  19. n.push(arr[i]);
  20. }
  21. }
  22. }
  23. return n;
  24. }
  25. //方案2,相比方案一,少了一层循环,提高效率,逻辑更加清晰
  26. Array.prototype.uniqueTree = function(key) {
  27. var res = [];
  28. var json = {};
  29. var arr = this;
  30. for (var i = 0; i < arr.length; i++) {
  31. if (arr[i][key]===undefined||json[arr[i][key]]===undefined) {
  32. res.push(arr[i]);
  33. json[arr[i][key]] = 1;
  34. }
  35. }
  36. return res;
  37. };
使用方法:

</>复制代码

  1. [1,2,3,4,3,2].unique()
  2. //[1,2,3,4]

</>复制代码

  1. [{a:1},{a:2},{a:1}].unique("a")
  2. //[{a:1},{a:2}]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80548.html

相关文章

  • JS数组去重的三种方法

    摘要:编写双重循环去重当出现相同的元素时,删除重复的元素哈希表形式查询对象是否存在当前元素属性借助方法查询空数组里面是否已经存在这个值,不存在则推入编写单元测试输出通过来实现是比较优雅的姿势。 编写uniqueArray.js var Unique = { /** * 双重循环去重 * @param arr * @returns {*} */ ...

    hikui 评论0 收藏0
  • 学习笔记: JS数组

    摘要:数组元素甚至可以是对象或其它数组。它执行的是浅拷贝,这意味着如果数组元素是对象,两个数组都指向相同的对象,对新数组中的对象修改,会在旧的数组的相同对象中反应出来。 JS中的数组是弱类型的,数组中可以含有不同类型的元素。数组元素甚至可以是对象或其它数组。JS引擎一般会优化数组,按索引访问数组常常比访问一般对象属性明显迅速。数组长度范围 from 0 to 4,294,967,295(2^...

    archieyang 评论0 收藏0
  • 面试小结(二)

    摘要:的用法,申明构造函数,返回。构造函数可以调用来获取下一个值,可以构造类似于随机数生成器。在构造器函数中,可以暂停然后返回当前表达式的值。总结是为了更好的消灭这些不知道,希望对大家也有所帮助。 1、function*的用法; function*,申明构造函数,返回{value:v,done:true_or_false}。构造函数可以调用next来获取下一个值,可以构造类似于随机数生成器。...

    lanffy 评论0 收藏0
  • 面试小结(二)

    摘要:的用法,申明构造函数,返回。构造函数可以调用来获取下一个值,可以构造类似于随机数生成器。在构造器函数中,可以暂停然后返回当前表达式的值。总结是为了更好的消灭这些不知道,希望对大家也有所帮助。 1、function*的用法; function*,申明构造函数,返回{value:v,done:true_or_false}。构造函数可以调用next来获取下一个值,可以构造类似于随机数生成器。...

    draveness 评论0 收藏0
  • 面试小结(二)

    摘要:的用法,申明构造函数,返回。构造函数可以调用来获取下一个值,可以构造类似于随机数生成器。在构造器函数中,可以暂停然后返回当前表达式的值。总结是为了更好的消灭这些不知道,希望对大家也有所帮助。 1、function*的用法; function*,申明构造函数,返回{value:v,done:true_or_false}。构造函数可以调用next来获取下一个值,可以构造类似于随机数生成器。...

    macg0406 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<