将 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 中。
- 我的问题是在我的第二种方法中为什么只有数组的第一个元素被添加到集合中?
- 如何将数组的所有元素添加到集合中 而无需 遍历每个数组元素并将它们添加到 Set(比如使用
for
、 map
或 forEach
)? (如果可能的话)
注意:在我的实际问题中,我不是一次获取所有数组。
正如@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]
我想在 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 中。
- 我的问题是在我的第二种方法中为什么只有数组的第一个元素被添加到集合中?
- 如何将数组的所有元素添加到集合中 而无需 遍历每个数组元素并将它们添加到 Set(比如使用
for
、map
或forEach
)? (如果可能的话)
注意:在我的实际问题中,我不是一次获取所有数组。
正如@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]