Ran*_*lue 39 javascript ecmascript-6
我已经打开了Chrome标志,用于实验性的ECMAscript 6功能,其中之一就是Set.据我了解,详细信息Set由规范编写者广泛认同.
我创建一个集合a并添加字符串'Hello'
a = Set();
a.add('Hello');
Run Code Online (Sandbox Code Playgroud)
但我如何迭代元素a?
for(let i of a) { console.log(i); }
Run Code Online (Sandbox Code Playgroud)
给出"SyntaxError:let扩展模式外的非法声明"
for(var i of a) { console.log(i); }
Run Code Online (Sandbox Code Playgroud)
给出"SyntaxError:意外的标识符"
for(var i in a) { console.log(i); }
Run Code Online (Sandbox Code Playgroud)
给 Undefined
是否有可能在Chrome 26中迭代一组?
lus*_*chn 20
一种非常简单的方法是首先将Set转换为数组:
let a = new Set();
a.add('Hello');
a = Array.from(a);
Run Code Online (Sandbox Code Playgroud)
...然后只使用一个简单的for循环.
biz*_*izi 17
根据MDN的规范,Set有一个值方法:
values()方法返回一个新的Iterator对象,该对象包含插入顺序中Set对象中每个元素的值.
所以,为了遍历这些值,我会这样做:
var s = new Set(['a1', 'a2'])
for (var it = s.values(), val= null; val=it.next().value; ) {
console.log(val);
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*nXh 16
我用的是这个forEach(..);功能.
小智 10
您可以使用两种方法。 for...of 和 forEach
let a = new Set();
a.add('Hello');
for(let key of a) console.log(key)
a.forEach(key => console.log(key))
Run Code Online (Sandbox Code Playgroud)
小智 8
您还可以使用扩展运算符将 a 转换Set为数组( 的替代方法Array.from(yourSet))。
const mySet = new Set();
mySet.add('a');
mySet.add('b')
const iterableSet = [...mySet];
// end up with: ['a', 'b']
// use any Array method on `iterableSet`
const lettersPlusSomething = iterableSet.map(letter => letter + ' something');
Run Code Online (Sandbox Code Playgroud)
一个简单的函数方法就是使用forEach
const mySet = new Set([1, 2, 3])
mySet.forEach(a => { console.log(a) })
// 1 2 3
Run Code Online (Sandbox Code Playgroud)
Chrome似乎不支持该of操作员。似乎只有FireFox 13至18版本支持它。似乎也没有任何浏览器实际支持,尽管该页面确实说某些测试代表存在而不是全部功能或一致性。因此,可能部分是在Chrome中实现的。SetSet
即使尚未实现迭代的语法糖,您仍然可以使用迭代器。
http://www.2ality.com/2012/06/for-of-ff13.html说明
特殊方法
__iterator__返回一个迭代器对象。这样的对象有一个方法next(),要么返回当前迭代序列中的下一个元素,要么在StopIteration没有更多元素时抛出。
所以你应该能够使用
for (var it = mySet.__iterator__();;) {
var element;
try {
element = it.next();
} catch (ex) {
if (ex instanceof StopIteration) {
break;
} else {
throw ex;
}
}
// Do something with element
}
Run Code Online (Sandbox Code Playgroud)
您还可以定义 for...of like 的功能版本
function forOf(collection, f) {
// jQuery.each calling convention for f.
var applyToElement = f.bind(/* this */ collection, /* index */ void 0);
for (var it = collection.__iterator__();;) {
var element;
try {
element = it.next();
} catch (ex) {
if (ex instanceof StopIteration) {
break;
} else {
throw ex;
}
}
// jQuery.each return convention.
if (applyToElement(element) === false) { break; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31835 次 |
| 最近记录: |