【发布时间】:2016-05-11 21:11:16
【问题描述】:
我想使用 ES6 的 Set 从某个字符串中获取唯一字符。
所以让我们假设我们有字符串var str = 'abcdeaabc'; 并从这个字符串创建一组字符:
var str = 'abcdeaadbc';
var chars = new Set(str);
现在我们有了一组独特的字符:abcd。
我很惊讶char set 有forEach 方法而没有map 方法。
Set 是可迭代的对象,那为什么我们不能使用map 函数来迭代set呢?
我尝试通过这种方式将chars set 和chars.values() SetIterator 传递给Array.prototype.map:
Array.prototype.map.call(chars, function(element) {...});
Array.prototype.map.call(chars.values(), function(element) {...});
但每次尝试都失败了。
例如,假设我们想从字符串中获取唯一的符号并返回一个带有前下划线的数组。例如:['_a', '_b', '_c', '_d']
这是我的两个解决方案:
// First:
var result = Array.from(chars).map(function(c) {
return '_' + c;
});
// Second:
var result = [];
chars.forEach(function(c) {
this.push('_' + c);
}, result);
但是有没有办法使用 Set 上下文调用 Array.prototype 的 map 函数?如果没有 - 为什么?
【问题讨论】:
-
您是否尝试过使用
Set.entries?实际上,再想一想,我认为这行不通…… -
stackoverflow.com/a/35374005/5812121。也可以选择:
let result = [...chars].map(c => `_${c}`);
标签: javascript arrays set ecmascript-6