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

用于在javascript中存储唯一值的数据结构,javascript,Javascript,仅存储唯一值的最佳数据类型是什么? 数组可以有重复项 [one, one, two] 一个对象(可能是错误的术语)对于我当前的情况有不必要的值 {one: something, two: something, three: something} 很快,我需要这样的东西: {one, two, three} 我不知道它叫什么,或者它是否存在于js中。需要一些启发。您指的是一个名为Set的结构,而在当前版本的ECMAScript中没有这样的结构。它将在下一个版本中标准化,但现在在某些浏览器中可

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

[one, one, two]
一个对象(可能是错误的术语)对于我当前的情况有不必要的值

{one: something, two: something, three: something}
很快,我需要这样的东西:

{one, two, three}

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

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


您可以使用object来模拟set,但正如您所说的,这也涉及到不必要的值。如果您不想关心它们,可以使用模拟集合的库,如

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

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

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

函数UArray(val){
该值为[];
if(typeof val!=“未定义”){
这个.集(val);
}
}
UArray.prototype.set=函数(值){
this.\u values=this.\u values.concat(值).filter(函数(el,i,arr){
返回arr.indexOf(el)==i;
});
};
UArray.prototype.get=函数(){
返回此值。\u值;
}
var uarr=新的UArray();
uarr.set(['one','one','two']);
警报(uarr.get());
uarr.set('two');
uarr.set(['three','one']);

警报(uarr.get())您查看过集合了吗<代码>新设置([“一”、“二”、“三”)
@homam Set非常酷,这正是OP想要的。但这是ECMAScript 5提案。但很快这将是一件非常棒的事情@霍曼:我不知道布景!我会检查的!谢谢。@dfsq什么是ECMAScript 5?类似的问题:下面是一个例子。支持已经相当不错了,主要浏览器是IE11+。@dfsq但我仍然不建议在生产中使用它。特别是Chrome只有在用户打开合适的标志后才支持它。谢谢你的回答:)在这种情况下使用{}或[]更好吗?(处理器和内存方面)不重要,但如果不需要键和值,就没有理由使用对象。