918 Stimmen

Wie konvertiert man ein Set in ein Array?

Set scheint eine gute Möglichkeit zu sein, Arrays mit garantiert eindeutigen Elementen zu erstellen, bietet jedoch keine gute Möglichkeit, Eigenschaften abzurufen, außer dem Generator [Set].values, der auf eine umständliche Weise als mySet.values.next() aufgerufen wird.

Dies wäre in Ordnung gewesen, wenn Sie map und ähnliche Funktionen auf Sets aufrufen könnten. Aber auch das ist nicht möglich.

Ich habe Array.from ausprobiert, aber anscheinend werden nur array-ähnliche (NodeList und TypedArrays ?) Objekte in Arrays konvertiert. Ein weiterer Versuch: Object.keys funktioniert nicht für Sets, und Set.prototype hat keine ähnliche statische Methode.

Also die Frage: Gibt es eine bequeme integrierte Methode zur Erstellung eines Arrays mit Werten eines bestimmten Sets ? (Die Reihenfolge der Elemente spielt nicht wirklich eine Rolle).

Wenn keine solche Option vorhanden ist, gibt es vielleicht eine schöne idiomatische Einzeiler-Lösung dafür ? zum Beispiel mit for...of oder ähnlichem ?

0voto

d0wn Punkte 91

In meinem Fall war die Lösung:

var testSet = new Set();
var testArray = [];

testSet.add("1");
testSet.add("2");
testSet.add("2"); // duplikates Element
testSet.add("3");

var someFunction = function (value1, value2, setItself) {
    testArray.push(value1);
};

testSet.forEach(someFunction);

console.log("testArray: " + testArray);

value1 entspricht value2 => Der Wert, der sich an der aktuellen Position im Set befindet. Derselbe Wert wird für beide Argumente übergeben

Funktionierte unter IE11.

0voto

Alireza Punkte 92209

Mit Set zu arbeiten und es in ein Array umzuwandeln, ist sehr ähnlich wie das Kopieren eines Arrays...

Deswegen kannst du die gleichen Methoden zum Kopieren eines Arrays verwenden, was sehr einfach in ES6 ist

Zum Beispiel kannst du ... verwenden

Stell dir vor, du hast dieses Set unten:

const a = new Set(["Alireza", "Dezfoolian", "ist", "ein", "Entwickler"]);

Du kannst es einfach konvertieren mittels:

const b = [...a];

und das Ergebnis ist:

["Alireza", "Dezfoolian", "ist", "ein", "Entwickler"]

Ein Array und jetzt kannst du alle Methoden verwenden, die du für ein Array verwenden kannst...

Weitere übliche Möglichkeiten es zu tun:

const b = Array.from(a);

oder durch Verwendung von Schleifen wie:

const b = [];
a.forEach(v => b.push(v));

0voto

Drashti Trivedi Punkte 21

Ich würde es vorziehen, mit dem Entfernen von Duplikaten aus einem Array zu beginnen und dann zu versuchen zu sortieren. Geben Sie das 1. Element des neuen Arrays zurück.

    function processData(myArray) {
        var s = new Set(myArray);
        var arr = [...s];
        return arr.sort((a,b) => b-a)[1];
    }

    console.log(processData([2,3,6,6,5]);

-1voto

zdrsoft Punkte 2037

Hier ist eine einfache Möglichkeit, nur eindeutige Rohwerte aus einem Array zu erhalten. Wenn Sie das Array in ein Set umwandeln und anschließend die Umwandlung von Set in Array durchführen. Diese Umwandlung funktioniert nur für Rohwerte, für Objekte im Array ist sie nicht gültig. Probieren Sie es selbst aus.

    let myObj1 = {
        name: "Dany",
        age: 35,
        address: "str. Meine Straße N5"
    }

    let myObj2 = {
        name: "Dany",
        age: 35,
        address: "str. Meine Straße N5"
    }

    var myArray = [55, 44, 65, myObj1, 44, myObj2, 15, 25, 65, 30];
    console.log(myArray);

    var mySet = new Set(myArray);
    console.log(mySet);

    console.log(mySet.size === myArray.length);// !! Die Größe unterscheidet sich, da Set nur eindeutige Elemente hat

    let uniqueArray = [...mySet];
    console.log(uniqueArray); 
    // Hier sehen Sie, dass Ihr neues Array nur eindeutige Elemente mit Rohwerten enthält. Die Objekte werden nicht als eindeutige Werte durch Set gefiltert.
    // Probieren Sie es selbst aus.

-2voto

Dmitriy Malayev Punkte 65
function countUniqueValues(arr) {
  return Array.from(new Set(arr)).length 

}

console.log(countUniqueValues([1, 2, 3, 4, 4, 4, 7, 7, 12, 12, 13]))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X