0

主题行中的 Python 习语

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

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

我知道在 JS 中设置集合的标准方法是使用对象(键是集合元素,值不重要),但我还没有找到在 JS 中创建这样一个集合的相当简洁的方法。

FWIW,我正在寻找的成语是为书签设计的(因此强调简洁)。

谢谢!

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

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

4

2 回答 2

5

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');

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

于 2012-05-14T00:14:42.117 回答
1

ECMAScript 第 5 版具有Array.reduce

'pdf ppt tif tiff jpg jpeg'.split(' ').reduce(function(d,v){
    return d[v] = true,d
}, {});

Object
jpeg: true
jpg: true
pdf: true
ppt: true
tif: true
tiff: true
__proto__: Object
于 2012-05-14T00:22:04.533 回答