用于在javascript中存储唯一值的数据结构

时间:2014-11-09 20:42:22

标签: javascript

仅存储唯一值的最佳数据类型是什么? 数组可以有重复

[one, one, two]

和一个对象(?可能是错误的术语)对我当前的案例

有不必要的值
{one: something, two: something, three: something}

很快,我需要这样的事情:

{one, two, three}

我不确定它叫什么,或者它是否确实存在于js中。需要一些启发。

3 个答案:

答案 0 :(得分:3)

你的意思是一个名为Set的结构,在当前版本的ECMAScript中没有这样的结构。它将在下一版本中标准化,但现在在某些浏览器中可用。

您可以使用object模拟set,但正如您所说,它也涉及不必要的值。如果您不想关心它们,可以使用模拟Set的库,例如http://collectionsjs.com/

答案 1 :(得分:1)

解决此问题的最常用方法是使用数组,并检查它是否已经包含要插入的值,这样它只包含唯一值。

if ( arr.indexOf(value) == -1 ) arr.push(value);

答案 2 :(得分:0)

除了显而易见的方法之外,如果您需要更高级的功能,还可以始终在数组顶部创建自己的数据结构。例如:



function UArray(val) {
    this._values = [];
    if (typeof val !== 'undefined') {
        this.set(val);
    }
}
UArray.prototype.set = function(values) {
    this._values = this._values.concat(values).filter(function(el, i, arr) {
        return arr.indexOf(el) === i;
    });
};
UArray.prototype.get = function() {
    return this._values;
}

var uarr = new UArray();
uarr.set(['one', 'one', 'two']);

alert( uarr.get() );

uarr.set('two');
uarr.set(['three', 'one']);

alert( uarr.get() );




这种自定义数据结构可以通过其他必要的方法进行扩展,即:

  • remove删除特定项目
  • find查找项目索引,如果找不到则为-1,