JavaScript-array til sett
MDN refererer til JavaScript sitt Set-samleabstraksjon. Jeg har et array med objekter som jeg ønsker å konvertere til et sett slik at jeg kan fjerne (.delete()) forskjellige elementer etter navn:
var array = [
{name: "malcom", dogType: "four-legged"},
{name: "peabody", dogType: "three-legged"},
{name: "pablo", dogType: "two-legged"}
];
Hvordan kan jeg konvertere dette arrayet til et sett? Mer spesifikt, er det mulig å gjøre dette uten å iterere over det ovennevnte arrayet? Dokumentasjonen er relativt mangelfull (tilstrekkelig for instansierte sett; ikke for konverteringer - hvis mulig).
Jeg tenker kanskje også på konverteringen til et kart, for fjerning etter nøkkel. Det jeg prøver å oppnå er en itererbar samling som kan nås eller endres ved å få tilgang til elementene først og fremst via en nøkkel (i motsetning til indeks).
Konvertering fra en matrise til en annen som det endelige målet.
Svar #1
Bare send arrayen til Set-konstruktøren. Set-konstruktøren aksepterer en iterable-parameter. Array-objektet implementerer iterable-protokollen, så det er en gyldig parameter.
var arr = [55, 44, 65];
var set = new Set(arr);
console.log(set.size === arr.length);
console.log(set.has(65));Se her
Svar #2
Hvis du starter med:
let array = [
{name: "malcom", dogType: "four-legged"},
{name: "peabody", dogType: "three-legged"},
{name: "pablo", dogType: "two-legged"}
];
Og du vil ha et sett med, for eksempel, navn, ville du gjort:
let namesSet = new Set(array.map(item => item.name));
Svar #3
const categoryWithDuplicates =[
'breakfast', 'lunch',
'shakes', 'breakfast',
'lunch', 'shakes',
'breakfast', 'lunch',
'shakes'
]
const categoryWithoutDuplicates =[...new Set(categoryWithDuplicates)];
console.log(categoryWithoutDuplicates)
Utgang: [ 'frokost', 'lunsj', 'milkshake' ]
Svar #4
Per definisjon "Et sett er en samling av verdier, hvor hver verdi kun kan forekomme én gang." Så, hvis arrayen din har gjentatte verdier, vil bare én verdi blant de gjentatte verdiene bli lagt til i Sett.
var arr = [1, 2, 3];
var set = new Set(arr);
console.log(set); // {1,2,3}
var arr = [1, 2, 1];
var set = new Set(arr);
console.log(set); // {1,2}
Så, ikke konverter til sett hvis du har gjentatte verdier i arrayen din.
