js数组去重的4种方法

秒速五厘米 2022-07-16 05:52 291阅读 0赞

js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法

贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill

复制代码

  1. Array.prototype.indexOf = Array.prototype.indexOf || function(item) {
  2. for (var i = 0, j = this.length; i < j; i++) {
  3. if (this[i] === item) {
  4. return i;
  5. }
  6. }
  7. return -1;
  8. }
  9. Array.prototype.forEach = Array.prototype.forEach || function(callback, thisArg) {
  10. if (!callback || typeof callback !== 'function') return;
  11. for (var i = 0, j = this.length; i < j; i++) {
  12. callback.call(thisArg, this[i], i, this);
  13. }
  14. }

复制代码

方法一:遍历数组,建立新数组,利用indexOf判断是否存在于新数组中,不存在则push到新数组,最后返回新数组

复制代码

  1. 1 function removeDuplicatedItem(ar) {
  2. 2 var ret = [];
  3. 3
  4. 4 for (var i = 0, j = ar.length; i < j; i++) {
  5. 5 if (ret.indexOf(ar[i]) === -1) {
  6. 6 ret.push(ar[i]);
  7. 7 }
  8. 8 }
  9. 9
  10. 10 return ret;
  11. 11 }

复制代码

方法二:遍历数组,利用object对象保存数组值,判断数组值是否已经保存在object中,未保存则push到新数组并用object[arrayItem]=1的方式记录保存

复制代码

  1. function removeDuplicatedItem2(ar) {
  2. var tmp = {},
  3. ret = [];
  4. for (var i = 0, j = ar.length; i < j; i++) {
  5. if (!tmp[ar[i]]) {
  6. tmp[ar[i]] = 1;
  7. ret.push(ar[i]);
  8. }
  9. }
  10. return ret;
  11. }

复制代码

方法三:数组下标判断法, 遍历数组,利用indexOf判断元素的值是否与当前索引相等,如相等则加入

复制代码

  1. function removeDuplicatedItem3(ar) {
  2. var ret = [];
  3. ar.forEach(function(e, i, ar) {
  4. if (ar.indexOf(e) === i) {
  5. ret.push(e);
  6. }
  7. });
  8. return ret;
  9. }

复制代码

方法四:数组先排序, 然后比较俩数组一头一尾进行去重

复制代码

  1. function removeDuplicatedItem4(ar) {
  2. var ret = [],
  3. end;
  4. ar.sort();
  5. end = ar[0];
  6. ret.push(ar[0]);
  7. for (var i = 1; i < ar.length; i++) {
  8. if (ar[i] != end) {
  9. ret.push(ar[i]);
  10. end = ar[i];
  11. }
  12. }
  13. return ret;
  14. }

复制代码

发表评论

表情:
评论列表 (有 0 条评论,291人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js数组方法

    今天来聊一聊JS数组去重的一些方法,包括一些网上看到的和自己总结的,总共5种方法(ES5)。 第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: