javascript - Hur man lägger till en array med värden till en Set
Det gamla skolmetoden för att lägga till alla värden i en array i Set är:
// for the sake of this example imagine this set was created somewhere else
// and I cannot construct a new one out of an array
let mySet = new Set()
for(let item of array) {
mySet.add(item)
}
Finns det ett mer elegant sätt att göra detta? Kanske mySet.add(array) eller mySet.add(...array)?
PS: Jag vet att båda inte fungerar
Svar #1
Även om Set-API fortfarande är mycket minimalistiskt, kan du använda Array.prototype.forEach och förkorta din kod lite:
array.forEach(item => mySet.add(item))
// alternative, without anonymous arrow function
array.forEach(mySet.add, mySet)
Svar #2
Här är ett funktionellt sätt, som returnerar en ny mängd:
const set = new Set(['a', 'b', 'c'])
const arr = ['d', 'e', 'f']
const extendedSet = new Set([ ...set, ...arr ])
// Set { 'a', 'b', 'c', 'd', 'e', 'f' }
Svar #3
Detta är enligt min åsikt det mest eleganta:
// for a new Set
const x = new Set([1,2,3,4]);
// for an existing Set
const y = new Set();
[1, 2, 3, 4].forEach(y.add, y);
Svar #4
Vad sägs om att använda spridningsoperatorn för att enkelt blanda dina nya arrayelement i en befintlig uppsättning?
let mySet = new Set([1,2,3,4])
const additionalSet = [5,6,7,8,9]
mySet = new Set([...mySet, ...additionalSet])
[JSFIDDLE][1] [1]: https://jsfiddle.net/clayperez/yjkxh9d8/9/
Svar #5
Du kan också använda Array.reduce():
const mySet = new Set();
mySet.add(42); // Just to illustrate that an existing Set is used
[1, 2, 3].reduce((s, e) => s.add(e), mySet);
