主题行中的 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/