【问题标题】:Data structure to store unique values in javascript在javascript中存储唯一值的数据结构
【发布时间】:2014-11-09 20:42:21
【问题描述】:

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

[one, one, two]

和一个对象(?可能是错误的术语)对于我当前的情况有不必要的值

{one: something, two: something, three: something}

很快,我需要这样的东西:

{one, two, three}

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

【问题讨论】:

标签: javascript


【解决方案1】:

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

您可以使用对象模拟集合,但正如您所说,这也涉及不必要的值。如果你不想关心它们,你可以使用一个模拟 Set 的库,比如http://collectionsjs.com/

【讨论】:

  • 这是Set at MDN。支持其实已经很不错了,主流浏览器,IE11+。
  • @dfsq 但我仍然不建议在生产中使用它。特别是 Chrome 仅在用户打开适当的标志后才支持它。
  • 谢谢你的回答:)
【解决方案2】:

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

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

【讨论】:

  • 在这种情况下使用 {} 还是 [] 更好? (处理器和内存方面)
  • 没关系,但如果你不需要键和值,就没有充分的理由使用对象。
【解决方案3】:

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

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,
  • 等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多