在ES6中,我们如何快速获取元素?
在MDN Set语法中,我没有找到答案。
在ES6中,我们如何快速获取元素?
在MDN Set语法中,我没有找到答案。
它们似乎没有将列表公开为可从实例化对象访问的。以下是来自EcmaScript草案的内容:
23.2.4 Set实例的属性
Set实例是普通对象,继承自Set原型的属性。Set实例还有一个[[SetData]]内部插槽。
[[SetData]]是Set所持有的值的列表。
一种可能的解决方案(并且是一种相对昂贵的解决方案)是获取迭代器,然后调用next()
以获取第一个值:
var x = new Set();
x.add(1);
x.add({ a: 2 });
//get iterator:
var it = x.values();
//get first entry:
var first = it.next();
//get value out of the iterator entry:
var value = first.value;
console.log(value); //1
值得一提的是:
Set.prototype.values === Set.prototype.keys
[...theSet][0]
- Alexandru Savinfirst = set.values().next().value
。方法2:first = [...set][0]
。方法3:[first] = set
。方法1和3基本上是O(1)的(在chrome中每秒约1500万次迭代,在firefox中为150万次,不考虑集合大小)。方法2是O(n),随着n的增加呈比例关系,大约为Chrome中的1秒/ 3亿和Firefox中慢10倍。除非集合非常小,否则不要使用方法2(first = [...set][0]
):它比其他方法昂贵得多。 - NicolasBfor...of
循环。
const set = new Set();
set.add(2);
set.add(3);
// return the first item of Set ✅
function getFirstItemOfSet(set) {
for(let item of set) {
if(item) {
return item;
}
}
return undefined;
}
const first = getFirstItemOfSet(set);
console.log('first item =', first);
destructuring assignment
const set = new Set();
set.add(2);
set.add(3);
// only get the first item ✅
const [first] = set;
console.log('first item =', first, typeof first);
// first item = 2 number
const set = new Set();
set.add(2);
set.add(3);
// convert Set to Array ✅
const first = [...set][0];
console.log('first item =', first);
iterator
和 next()
const set = new Set();
set.add(2);
set.add(3);
// iterator ✅
const first = set.keys().next().value;
console.log(`first item =`, first);
// OR
set.values().next().value;
// OR
set.entries().next().value[0];
// OR
set.entries().next().value[1];
for
循环中使用if
条件语句? - Bergilet s = new Set([2,3,4])
let [head] = s
console.log(head)
const data=new Set(['1', '2', '3']);
const first = [...data][0];
set.values().next().value
。const set = new Set([0, 1, 2, 3, 4]);
const first = set.values().next().value; // first will be equal to 0
const mySet = new Set(['foo', 'bar', 'baz'])
const [firstElement, secondElement, thirdElement] = mySet
console.log(thirdElement, firstElement, secondElement) // baz foo bar
for..of
循环,例如:const mySet = new Set(["one", "two", 3]);
for (let item of mySet) {
console.log(item);
break;
}
Set<T>
上使用迭代器:const mySet = new Set<string>(['one', 'two', 'three']);
const firstValue = mySet.values().next().value;
console.log(firstValue);
您还可以将其转换为数组,然后使用普通索引:
const mySet = new Set<string>(['one', 'two', 'three']);
const firstValue = Array.from(mySet)[0];
console.log(firstValue);
从复杂度的角度来看,第一种方法更好,因为它不需要创建一个新的数组。