如何在数组中获得唯一值的列表?我总是必须使用第二个数组,或者在JavaScript中有类似于java的hashmap的东西吗?

我将只使用JavaScript和jQuery。不能使用其他库。


当前回答

使用jQuery,这是一个数组唯一的函数我做:

Array.prototype.unique = function () {
    var arr = this;
    return $.grep(arr, function (v, i) {
        return $.inArray(v, arr) === i;
    });
}

console.log([1,2,3,1,2,3].unique()); // [1,2,3]

其他回答

再想想这个问题。下面是我用更少的代码实现这一目标的方法。

var distinctMap = {}; var testArray = ['John', 'John', 'Jason', 'Jason']; For (var I = 0;i < testArray.length;我+ +){ var值= testArray[i]; distinctMap[value] = "; }; var unique_values = Object.keys(distinctMap); console.log (unique_values);

Array.prototype.unique = function () {
    var dictionary = {};
    var uniqueValues = [];
    for (var i = 0; i < this.length; i++) {
        if (dictionary[this[i]] == undefined){
            dictionary[this[i]] = i;
            uniqueValues.push(this[i]);
        }
    }
    return uniqueValues; 
}

上面的大多数解决方案都具有较高的运行时复杂性。

下面是使用reduce的解决方案,可以在O(n)时间内完成工作。

Array.prototype.unique = Array.prototype.unique || function() { Var arr = []; 这一点。Reduce(函数(哈希,num) { If (typeof hash[num] === 'undefined') { Hash [num] = 1; arr.push (num); } 返回哈希; }, {}); 返回arr; } var myArr = [3,1,2,3,3,3]; console.log (myArr.unique ());/ /(3、1、2);

注意:

这个解决方案不依赖于reduce。其思想是创建一个对象映射,并将唯一的对象推入数组。

在Javascript中不是原生的,但是很多库都有这个方法。

Underscore.js的_.uniq(array) (link)工作得很好(来源)。

使用jQuery,这是一个数组唯一的函数我做:

Array.prototype.unique = function () {
    var arr = this;
    return $.grep(arr, function (v, i) {
        return $.inArray(v, arr) === i;
    });
}

console.log([1,2,3,1,2,3].unique()); // [1,2,3]