我有一个来自~6k字符串元素的大字符串数组。我知道在我的浏览器中设置工作,并且在小型阵列上测试时很好。当我尝试将大型数组转换为新的Set时,它所做的就是返回一个空数组。
我的数组最初是嵌套数组的一部分,尽管尝试了几种将它输入到集合中的方法。其中一些是:
var input = Bigger_array[1];
var input = [...Bigger_array[1]];
var dummy = Bigger_array[1];
var input = [...dummy];
此外,还尝试了不同的创建方法的方法:
var s = new Set(input);
var s = new Set();
for (var j = 0; j < input.length; j++) {
s.add(input[i]);
}
一切都无济于事:
set {}
根据要求为小型阵列提供工作小提琴:
Bigger_array=[['a','b','c'],['a','b','c']]
var input = [...Bigger_array[1]];
var s = new Set();
for (var j = 0; j < input.length; j++) {
s.add(input[j]);
}
console.log(s);
///the original method
var input =Bigger_array[1]
var s = new Set(input);
console.log(s);
alert('viewing s in console presents correct values of set \n fiddle is being weird' )
//etc...
答案 0 :(得分:1)
控制台可以玩弄你。它有自己的表示数据的方法,这与JavaScript toString
方法不同。它可以剪辑数据,甚至根本不显示数据。其他时候它会延迟输出,这也会导致误导输出。
要确认您的set
没问题,请输出其大小:
console.log(s.size);
或者,您可以将其转换回数组:
console.log([...s]);
答案 1 :(得分:1)
显然,某些JS引擎无法正确console.log()
Set
或Map
对象,而只是收到一个空的对象,如{}
。不要被欺骗。我相信它与Set构造函数的toString()
方法有关。更多信息是here。