如何在 ES6 中获取 Set 的第一个元素(EcmaScript 2015)

新手上路,请多包涵

在ES6中,我们如何快速获取元素呢?

Set 的 MDN 语法中,我没有找到答案。

原文由 JavaScripter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

他们似乎没有公开可从实例化对象访问的列表。这是来自 EcmaScript 草案:

23.2.4 集合实例的属性

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

原文由 MinusFour 发布,翻译遵循 CC BY-SA 4.0 许可协议

有很多解决方案

  1. for...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);
  1. 解构赋值
 const set = new Set();
set.add(2);
set.add(3);

// only get the first item ✅
const [first] = set;
console.log('first item =', first);
  1. ...spread 运营商
 const set = new Set();
set.add(2);
set.add(3);

// convert Set to Array ✅
const first = [...set][0];
console.log('first item =', first);
  1. 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];

参考

https://www.cnblogs.com/xgqfrms/p/16564519.html

原文由 xgqfrms 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏