javascript 删除数组中的重复元素

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9751413/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 07:43:27  来源:igfitidea点击:

Removing duplicate element in an array

javascriptarraysduplicatesunique

提问by vishnu

Possible Duplicate:
Easiest way to find duplicate values in a JavaScript array
Javascript array sort and unique

可能的重复:
在 JavaScript 数组中查找重复值的最简单方法
Javascript 数组排序和唯一

I have the following array

我有以下数组

var output = new array(7);
  output[0]="Rose";
  output[1]="India";
  output[2]="Technologies";
  output[3]="Rose";
  output[4]="Ltd";
  output[5]="India";
  output[6]="Rose";

how can i remove the duplicate elements in above array.Is there any methods to do it?

如何删除上面数组中的重复元素。有什么方法可以做到吗?

回答by asitmoharna

You can write a function like this

你可以写一个这样的函数

function eliminateDuplicates(arr) {
var i,
  len=arr.length,
  out=[],
  obj={};

 for (i=0;i<len;i++) {
 obj[arr[i]]=0;
 }
 for (i in obj) {
 out.push(i);
 }
 return out;
}`

Check this here

在这里检查这个

回答by nathanjosiah

Maybe more complex than you need but:

可能比您需要的更复杂,但是:

function array_unique (inputArr) {
    // Removes duplicate values from array  
    var key = '',
        tmp_arr2 = {},
        val = '';

    var __array_search = function (needle, haystack) {
        var fkey = '';
        for (fkey in haystack) {
            if (haystack.hasOwnProperty(fkey)) {
                if ((haystack[fkey] + '') === (needle + '')) {
                    return fkey;
                }
            }
        }
        return false;
    };

    for (key in inputArr) {
        if (inputArr.hasOwnProperty(key)) {
            val = inputArr[key];
            if (false === __array_search(val, tmp_arr2)) {
                tmp_arr2[key] = val;
            }
        }
    }

    return tmp_arr2;
}

Code taken from: http://phpjs.org/functions/array_unique:346

代码取自:http: //phpjs.org/functions/array_unique: 346

回答by jfriend00

You can remove dups from an array by using a temporary hash table (using a javascript object) to keep track of which images you've already seen in the array. This works for array values that can be uniquely represented as a string (strings or numbers mostly), but not for objects.

您可以使用临时哈希表(使用 javascript 对象)从数组中删除重复项,以跟踪您已经在数组中看到的图像。这适用于可以唯一表示为字符串(主要是字符串或数字)的数组值,但不适用于对象。

function removeDups(array) {
    var index = {};
    // traverse array from end to start 
    // so removing the current item from the array
    // doesn't mess up the traversal
    for (var i = array.length - 1; i >= 0; i--) {
        if (array[i] in index) {
            // remove this item
            array.splice(i, 1);
        } else {
            // add this value to index
            index[array[i]] = true;
        }
    }
}

Here's a working example: http://jsfiddle.net/jfriend00/sVT7g/

这是一个工作示例:http: //jsfiddle.net/jfriend00/sVT7g/

For sizable arrays, using an object as a temporary index will be many times faster than a linear search of the array.

对于相当大的数组,使用对象作为临时索引将比数组的线性搜索快很多倍。

回答by Elliot Bonneville

First of all, you'll want to use the array literal (var output = []) to declare your array. Second, you'll want to loop through your array and store all the values in a second array. If any value in the first array matches a value in the second array, delete it and continue looping.

首先,您需要使用数组字面量 ( var output = []) 来声明您的数组。其次,您需要遍历数组并将所有值存储在第二个数组中。如果第一个数组中的任何值与第二个数组中的值匹配,则将其删除并继续循环。

Your code would look like this:

您的代码如下所示:

var output = [
    "Rose",
    "India",
    "Technologies",
    "Rose",
    "Ltd",
    "India",
    "Rose"
]

var doubledOutput = [];

for(var i = 0; i < output.length; i++) {
    var valueIsInArray = false;

    for(var j = 0; j < doubledOutput.length; j++) {
        if(doubledOutput[j] == output[i]) {
            valueIsInArray = true;
        }
    }

    if(valueIsInArray) {
        output.splice(i--, 1);
    } else {
        doubledOutput.push(output[i]);
    }
}

Please note, the above code is untested and may contain errors.

请注意,上述代码未经测试,可能包含错误。