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);

Relaterade artiklar