仅存储唯一值的最佳数据类型是什么? 数组可以有重复
[one, one, two]
和一个对象(?可能是错误的术语)对我当前的案例
有不必要的值{one: something, two: something, three: something}
很快,我需要这样的事情:
{one, two, three}
我不确定它叫什么,或者它是否确实存在于js中。需要一些启发。
答案 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,