将 Array(destructured) 添加到 Set 中的功能方法是什么

What will be the functional approach to add an Array(destructured) into Set

我想在 Set 中添加一些数组(仅包含它们的内容)。喜欢:

我的数组:

var arr1 = [55, 44, 65];
var arr2 = [22, 11, 33];

我希望我的集合是:[55, 44, 65, 22, 11, 33]

我尝试过的:

var arr1 = [55, 44, 65];
var arr2 = [22, 11, 33]
var set = new Set();
set.add(arr1)
set.add(arr2)
set.add([8, 5])
console.log(set);                          

它在集合中添加了三个数组而不是单个数字。

所以,我也试过这样做:JSFiddle

var arr1 = [55, 44, 65];
var arr2 = [22, 11, 33]
var set = new Set();
set.add(...arr1)
set.add(...arr2)
set.add(...[8, 5])
console.log(set);

但是,它只是将数组的第一个元素添加到 Set 中。

注意:在我的实际问题中,我不是一次获取所有数组。

正如@Rajesh 所说,我相信您可以将数组连接成一个,并从中创建一个集合。

var set = new Set(arr1.concat(arr2.concat([8, 5])));

编辑:之后要添加另一个数组,您可能会在添加每个数组时创建一个新集合,并将它们连接起来

set = new Set([...set, ...newSet])

set = new Set(Array.from(set).concat(Array.from(newSet)))

如此完整的示例:

var arr1 = [55, 44, 65];
var arr2 = [22, 11, 33];
var set = new Set(arr1.concat(arr2.concat([8, 5])));
var arr3 = [10, 20];
var newSet = new Set(arr3);
set = new Set(Array.from(set).concat(Array.from(newSet)));
set.forEach(function(element) {
  console.log(element);
});

输出:

> 55
> 44
> 65
> 22
> 11
> 33
> 8
> 5
> 10
> 20

如评论所述,您可以试试

var set = new Set(arr1.concat(arr2, [8, 5]))

你可以测试一下here


However, It only adds the first elements of the array into Set.

如果你引用 docs,它说,.add 只需要 1 个参数。因此,当您执行 ...[8, 5] 时,它会传播并添加第一个值并忽略剩余的值。


In my actual problem I do not get all the arrays at once.

在这里,您可以将集合转换回数组并创建新集合:

var set2 = new Set(Array.from(set).concat([8, 5]))

你可以查看一下here


您还可以使用扩展运算符,例如:

var set2 = new Set([...set].concat([8, 5]))

Updated Fiddle 来测试它,但作为个人喜好,我更喜欢 Array.from 因为它更具可读性。你可以选择任何你喜欢的方式。

如果你不想创建新的集合,循环也没有错:

var arr1 = [55, 44, 65];
var arr2 = [22, 11, 33]
var set = new Set();
var setAdd = set.add.bind(set);
arr1.forEach(setAdd);
arr2.forEach(setAdd);
[8, 5].forEach(setAdd);
console.log(Array.from(set)); // Whosebug snippet console can't print sets yet
// [55, 44, 65, 22, 11, 33, 8, 5]