如何在Chrome中将Set转换为Array?

9
如何将Set转换为Array?提供了三种将Set转换为Array的答案,但目前在Chrome浏览器中都无法正常工作。
假设我有一个简单的Set:
var set_var = new Set(['a', 'b', 'c']);

我可以通过遍历变量并将元素添加到空数组中来实现迭代。
var array_var = [];
set_var.forEach(function(element){array_var.push(element)});

但是否有其他方法可以实现这一点,而且具有更广泛的浏览器支持?

2
Set 本身是 ES6 Harmony 的一部分。由于这是实验性技术,因此您不会找到“更广泛的浏览器支持”。有一些方法可以在没有 Array.prototype.forEach 的情况下进行迭代,但这些方法适用于根本不支持 Set 的浏览器。 - Sampson
@JonathanSampson 好的,我听到你的意见了。让我们专注于 Chrome。Chrome 确实支持 Set,但并不支持其他浏览器支持的所有功能。在 Chrome 中是否有其他方法将 Set 转换为数组? - Cecilia
这个更复杂,但如果你只想要另一种方法,可以考虑:var mySet = Set(['a','b','c']); iter = mySet.keys(); for(var i = 0; i < mySet.size; i++){ console.log(iter.next().value[0]) } - Kelvin17
2
可能是重复的问题:如何将Set转换为Array? - Eric
2个回答

1
为什么不尝试使用set迭代器?
function setToArray(set) {
  var it = set.values(),
      ar = [],
      ele = it.next();

  while(!ele.done) {
    ar.push(ele.value);
    ele = it.next();
  }

  return ar;
}

setToArray(new Set(['a', 'b', false, 0, 'c'])); // ["a", "b", false, 0, "c"]

使用集合迭代器有哪些优势? - Cecilia
@Cecilia 我不确定你在寻找什么,是性能、兼容性还是其他方面。这只是众多方法之一。老实说,我没有看到与你的方法有显著的区别。 - Leo
如果Set包含Falsy值,此实现将失败。始终检查current.finished而不是current.value。 - garkin
@garkin 在 PO 提供的样本数据中漏掉了那一点,已更新答案。谢谢。 - Leo

1
我推荐:

const array_var = [ ...set_var ]


1
虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接