Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数组中删除重复的元素_Javascript_Arrays - Fatal编程技术网

Javascript 从数组中删除重复的元素

Javascript 从数组中删除重复的元素,javascript,arrays,Javascript,Arrays,例如,我有一个这样的数组 var arr = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 8, 9, 10, 10] var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 我的目的是丢弃数组中的重复元素,得到这样的最终数组 var arr = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 8, 9, 10, 10] var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 如何在Java

例如,我有一个这样的数组

var arr = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 8, 9, 10, 10]
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我的目的是丢弃数组中的重复元素,得到这样的最终数组

var arr = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 8, 9, 10, 10]
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如何在JavaScript中实现这一点


注意:数组未排序,值可以是任意顺序。

由于元素尚未排序,您不必构建映射,有一个快速解决方案:

var newarr = [arr[0]];
for (var i=1; i<arr.length; i++) {
   if (arr[i]!=arr[i-1]) newarr.push(arr[i]);
}
var newarr=[arr[0]];

对于(var i=1;i您可以使用jquery这样做

 var arr = [1,2,2,3,4,5,5,5,6,7,7,8,9,10,10];
    var uniqueVals = [];
    $.each(arr, function(i, el){
        if($.inArray(el, uniqueVals) === -1) uniqueVals.push(el);
    });
请从以下位置尝试:

Array.prototype.removeDuplicates=函数(){
var temp=新数组();
this.sort();
对于(i=0;i
var arr=[1,2,2,3,4,5,5,6,7,8,9,10,10];
函数挤压(arr){
var tmp=[];
对于(变量i=0;i
工作示例

更容易使用:


您可以在数组上循环并将所有元素复制到一个映射。@Devolus仅对字符串和数字有效,不能使用object或array作为索引键。这是一种解决方案,但也是蛮力解决方案。有更智能(高效)的吗方法是:对数组进行排序,迭代,如果与上一个数组不同,则将元素推送到新数组中。@Devolus:但JavaScript与Java不同。数组并不总是被排序的。这比这更容易使您的方法更简单var m=[];arr.forEach(v=>m[v]=true);var newarr=Object.keys(m);很简单,对吧?这是一个很好的答案。我会使用ES6集合而不是对象,这样列表中的项目就不必是字符串。(显然,在编写答案时,这不是一个选项。)对于无序数组,它的速度也非常快。谢谢!这个函数不仅可以删除重复的数组,还可以进行排序。为什么要用这样一个特定的函数来阻碍数组的原型(这对任何类型的数组都不起作用,因为大多数数组都不能直接排序)?也许最好测试不平等性并处理
继续
@Matanya我正在改进我的answer@thg435我犯了
{
在第一个代码中,这就是它不工作的原因,现在已更正并测试。这是如何有效的?注意解释最坏情况下的运行时间取决于indexOf如何工作如果它在线性时间中运行,那么最坏情况下的时间是O(n^2)@AbKDs请详细说明this@MehmetInce在O(n^2)中运行的过滤器根本不是“高效的”迭代数组的所有元素,并仅返回回调返回true的元素。.indexOf()返回数组中最左侧元素的索引。如果存在重复元素,则确保在将其索引与最左侧元素进行比较时将删除这些元素。有关详细信息,请检查:)@maddle这个答案对于非常小的列表仍然适用。它的优点是代码非常简单,因此与使用辅助存储的代码相比,它不太可能有bug,也不太容易读取。但是,它的灵活性较差:如果您只想基于列表中的一个项目字段消除重复项,那么它将不起作用另一种解决方案很容易适应这种情况。
Array.prototype.removeDuplicates = function (){
  var temp=new Array();
  label:for(i=0;i<this.length;i++){
        for(var j=0; j<temp.length;j++ ){//check duplicates
            if(temp[j]==this[i])//skip if already present 
               continue label;      
        }
        temp[temp.length] = this[i];
  }
  return temp;
 } 
var arr = [1,2,2,3,4,5,5,5,6,7,7,8,9,10,10];

function squash(arr){
    var tmp = [];
    for(var i = 0; i < arr.length; i++){
        if(tmp.indexOf(arr[i]) == -1){
        tmp.push(arr[i]);
        }
    }
    return tmp;
}

console.log(squash(arr));
var unique = arr.filter(function(elem, index, self) {
    return index === self.indexOf(elem);
})