JavaScript for `set(' pdf ppt tif tiff jpg jpeg'.split())`?

标签 javascript set bookmarklet

主题行中的 Python 习惯用法

set('pdf ppt tif tiff jpg jpeg'.split())

展示了一种相当紧凑的方法来创建一组字符串。1我正在寻找一种类似的紧凑习惯用法来创建集合 在 JavaScript 中。 (注意:我仅仅对创建字符串列表感兴趣。)

我知道 JS 中集合的标准方法是使用对象(键是集合元素,值无关紧要),但我还没有找到一种相对简洁的方法来在 JS 中创建这样的集合。

FWIW,我正在寻找的习语是用于小书签的(因此强调简洁性)。

谢谢!

1 对于不熟悉 Python 的人来说,内部表达式的计算结果只是通过在空格处分割调用字符串对象而获得的字符串列表;这个列表就是 set 构造函数的参数。

编辑:强调我正在寻找集合(即对象),而不是列表字符串。

最佳答案

JavaScript 没有 set 类型,但您需要一个辅助函数来轻松地从字符串(或从 Array)创建它。

这是一个这样的辅助函数,它允许您在字符串上调用 .set() 并获取将字符串中的项目映射到某个值的对象 (true如果没有指定):

String.prototype.set = function(val) {
    var items = this.split(' '),
        len = items.length,
        obj = {},
        i;
    for(i = 0; i < len; i++) {
        obj[items[i]] = val === undefined ? true : val;
    }
    return obj;
};

演示:

> 'pdf ppt tif tiff jpg jpeg'.set()
{ pdf: true,
  ppt: true,
  tif: true,
  tiff: true,
  jpg: true,
  jpeg: true }

由于您更喜欢简洁,因此如果您只需要单个字符串,这可能是您的解决方案:

var set = (function(s){ var obj = {}; for(var i = 0, elems = s.split(' '), l = elems.length; i < l; i++) obj[elems[i]] = 1; return obj; })('pdf ppt tif tiff jpg jpeg');

在这种情况下,我会考虑简单地使用对象文字...这很可能是最短的解决方案,除非您有大量元素。

关于JavaScript for `set(' pdf ppt tif tiff jpg jpeg'.split())`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10576238/

相关文章:

javascript - 在javascript中同时捕获鼠标左键和右键单击

javascript - 在 Javascript 中,这个下划线是什么意思?

javascript - cordova facebook 登录 FB.api 调用不起作用

c++ - QSet 中的重复项

javascript - 用于编辑当前 URL 的书签

javascript - 使用 cufon/sifr 时如何允许用户选择文本?

Javascript从带有输入标题的单选按钮获取金额

python - 有效地迭代 pandas 行

python 2.7 写 "x in set"与 "set.__contains__(x)"

javascript - 为什么这个小书签代码说 jQuery 没有定义,即使包含了 jQuery?