我如何用独特的元素(即去除重复)数组? [英] How do I make an array with unique elements (i.e. remove duplicates)?

查看:89
本文介绍了我如何用独特的元素(即去除重复)数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的code:

  VAR AR = [10,7,8,3,4,7,6];功能ISIN(N,A){
  对于(VAR I = 0; I<则为a.length;我++){
    如果(A [I] == N){
      变种B =真实的;
      返回b;
    }其他{
      变种C = FALSE;
      返回℃;
   }
  }
}功能独特(一){
  VAR ARR = [];
  对于(VAR I = 0; I<则为a.length;我++){
    如果(!ISIN(一个由[i],ARR)){
      arr.push(一个由[i]);
    }
  } 返回ARR;
}警报(唯一的(AR));

在此code,我试图创造新的独特的阵列(无重复)从原来的。
但是我还是原来的阵!哪里是我的错?


解决方案

使用普通数组并返回关联数组的键(只包含了独特,从给出的值)是更有效的:

\r
\r

函数ArrNoDupe(一){\r
    变种临时= {};\r
    对于(VAR I = 0; I<则为a.length;我++)\r
        临时[A [I] = TRUE;\r
    变种R = [];\r
    对(在临时变种K)\r
        r.push(K);\r
    返回ř;\r
}\r
\r
$(文件)。就绪(函数(){\r
    变种ARR = [10,7,8,3,4,3,7,6]\r
    VAR noDupes = ArrNoDupe(ARR);\r
    $(#之前)HTML。(之前:+ arr.join());\r
    $(#后)的HTML(经过:+ noDupes.join(,));\r
});

\r

&LT;脚本SRC =htt​​ps://ajax.googleapis.com/ajax /libs/jquery/2.1.1/jquery.min.js\"></script>\r
&LT; D​​IV ID =之前&GT;&LT; / DIV&GT;\r
&LT; D​​IV ID =之后,&GT;&LT; / DIV&GT;

\r

\r
\r

注意:函数没有preserve该项目的顺序,因此,如果这是非常重要的使用不同的逻辑

随着IE9和其他所有现代浏览器(如浏览器,火狐)这样可以更加有效地使用 Object.keys()方法:

\r
\r

函数ArrNoDupe(一){\r
    变种临时= {};\r
    对于(VAR I = 0; I&LT;则为a.length;我++)\r
        临时[A [I] = TRUE;\r
    返回Object.keys(临时);\r
}\r
\r
$(文件)。就绪(函数(){\r
    变种ARR = [10,7,8,3,4,3,7,6]\r
    VAR noDupes = ArrNoDupe(ARR);\r
    $(#之前)HTML。(之前:+ arr.join());\r
    $(#后)的HTML(经过:+ noDupes.join(,));\r
});

\r

&LT;脚本SRC =htt​​ps://ajax.googleapis.com/ajax /libs/jquery/2.1.1/jquery.min.js\"></script>\r
&LT; D​​IV ID =之前&GT;&LT; / DIV&GT;\r
&LT; D​​IV ID =之后,&GT;&LT; / DIV&GT;

\r

\r
\r

<子>感谢wateriswet <一个href=\"http://stackoverflow.com/questions/6940103/how-do-i-make-an-array-with-unique-elements-i-e-remove-duplicates/6940176#comment61794445_6940176\">bringing这让我注意。 :)

I have this code:

var ar = [10,7,8,3,4,7,6];

function isin(n,a){
  for (var i=0;i<a.length;i++){
    if (a[i]== n) {
      var b = true;
      return b;
    } else {
      var c = false;
      return c;
   }
  }
}

function unique(a){
  var arr = [];
  for (var i=0;i<a.length;i++){
    if (!isin(a[i],arr)){
      arr.push(a[i]);
    }
  }

 return arr;
}

alert(unique(ar));

In this code, I try to create new unique array (without duplicates) out of the original one. But I still get the original array! Where's my mistake?

解决方案

Using a plain array and returning the keys of associative array (containing only the "unique" values from given array) is more efficient:

function ArrNoDupe(a) {
    var temp = {};
    for (var i = 0; i < a.length; i++)
        temp[a[i]] = true;
    var r = [];
    for (var k in temp)
        r.push(k);
    return r;
}

$(document).ready(function() {
    var arr = [10, 7, 8, 3, 4, 3, 7, 6];
    var noDupes = ArrNoDupe(arr);
    $("#before").html("Before: " + arr.join(", "));
    $("#after").html("After: " + noDupes.join(", "));
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="before"></div>
<div id="after"></div>

Note: The function does not preserve the order of the items, so if this is important use different logic.

As of IE9 and on all other modern browsers (e.g. Chrome, Firefox) this can become even more efficient by using the Object.keys() method:

function ArrNoDupe(a) {
    var temp = {};
    for (var i = 0; i < a.length; i++)
        temp[a[i]] = true;
    return Object.keys(temp);
}

$(document).ready(function() {
    var arr = [10, 7, 8, 3, 4, 3, 7, 6];
    var noDupes = ArrNoDupe(arr);
    $("#before").html("Before: " + arr.join(", "));
    $("#after").html("After: " + noDupes.join(", "));
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="before"></div>
<div id="after"></div>

Thanks wateriswet for bringing this to my attention. :)

这篇关于我如何用独特的元素(即去除重复)数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆