This translation is incomplete. Please help translate this article from English.

Η δομή Set επιτρέπει την αποθήκευση μοναδικών τιμών οποιουδήποτε τύπου, είτε τιμών τύπου primitive values είτε αναφορών σε αντικείμενα.

Syntax

new Set([iterable]);

Παράμετροι

iterable
Εάν ένα iterable object περαστεί ως παράμετρος, όλα τα στοιχεία του θα προστεθούν στο καινούριοSet. Εάν δεν προσδιοριστεί αυτή η παράμετρος, ή αν η τιμή της είναι null, το καινούριο Set θα είναι άδειο.

Επιστρεφόμενη τιμή

Ένα καινούριο αντικείμενο Set.

Περιγραφή

Set αντικείμενα αποτελούν συλλογές από τιμές. Μπορεί κάποιος να κάνει περάσματα στα στοιχεία ενός set με τη σειρά που προστέθηκαν. Μια τιμή στο Set μπορεί να περιέχεται μόνο μια φορά; Είναι μοναδική στη συλλογή ενός Set.

Ισότητα τιμών

Καθώς κάθε τιμή στο Set πρέπει να είναι μοναδική, θα πρέπει να ελεγχθεί η ισότητα της τιμής. Σε μια προηγούμενη έκδοση της ECMAScript αυτό δεν ήταν βασισμένο στον ίδιο αλγόριθμο σαν αυτόν που χρησιμοποιείται στον συντελεστή ===. Συγκεκριμένα, για τα Set, το +0 (το οποίο είναι αυστηρά ίσο με το -0) και το  -0 ήταν διαφορετικές τιμές. Παρόλα αυτά, αυτό άλλαξε στον προσδιορισμό της ECMAScript 2015. Δείτε το "Value equality for -0 and 0" στον πίνακα browser compatibility για λεπτομέρειες.

Επίσης, τα NaN και undefined μπορούν επίσης να αποθηκευτούν σε ένα Set. Το NaN θεωρείται το ίδιο με το NaN (παρόλο που NaN !== NaN).

Properties

Set.length
Η τιμή της παραμέτρου length είναι 0.
get Set[@@species]
Ο κατασκευαστής που χρησιμοποιείται για να δημιουργήσει συμπληρωματικά αντικείμενα.
Set.prototype
Αναπαριστά το πρωτότυπο για τον κατασκευαστή του Set. Επιτρέπει την προσθήκη παραμέτρων σε όλα τα αντικείμενα του Set.

Set instances

Όλα τα Set instances κληρονομούν από το Set.prototype.

Properties

Set.prototype.constructor
Returns the function that created an instance's prototype. This is the Set function by default.
Set.prototype.size
Returns the number of values in the Set object.

Methods

Set.prototype.add(value)
Appends a new element with the given value to the Set object. Returns the Set object.
Set.prototype.clear()
Removes all elements from the Set object.
Set.prototype.delete(value)
Removes the element associated to the value and returns the value that Set.prototype.has(value) would have previously returned. Set.prototype.has(value) will return false afterwards.
Set.prototype.entries()
Returns a new Iterator object that contains an array of [value, value] for each element in the Set object, in insertion order. This is kept similar to the Map object, so that each entry has the same value for its key and value here.
Set.prototype.forEach(callbackFn[, thisArg])
Calls callbackFn once for each value present in the Set object, in insertion order. If a thisArg parameter is provided to forEach, it will be used as the this value for each callback.
Set.prototype.has(value)
Returns a boolean asserting whether an element is present with the given value in the Set object or not.
Set.prototype.keys()
Is the same function as the values() function and returns a new Iterator object that contains the values for each element in the Set object in insertion order.
Set.prototype.values()
Returns a new Iterator object that contains the values for each element in the Set object in insertion order.
Set.prototype[@@iterator]()
Returns a new Iterator object that contains the values for each element in the Set object in insertion order.

Παραδείγματα

Χρησιμοποιώντας το αντικείμενο Set

var mySet = new Set();

mySet.add(1); // Set { 1 }
mySet.add(5); // Set { 1, 5 }
mySet.add(5); // Set { 1, 5 }
mySet.add('some text'); // Set { 1, 5, 'some text' }
var o = {a: 1, b: 2};
mySet.add(o);

mySet.add({a: 1, b: 2}); // o is referencing a different object so this is okay

mySet.has(1); // true
mySet.has(3); // false, 3 has not been added to the set
mySet.has(5);              // true
mySet.has(Math.sqrt(25));  // true
mySet.has('Some Text'.toLowerCase()); // true
mySet.has(o); // true

mySet.size; // 5

mySet.delete(5); // removes 5 from the set
mySet.has(5);    // false, 5 has been removed

mySet.size; // 4, we just removed one value
console.log(mySet);// Set {1, "some text", Object {a: 1, b: 2}, Object {a: 1, b: 2}}

Κάνοντας επανάληψη στα Sets

// iterate over items in set
// logs the items in the order: 1, "some text", {"a": 1, "b": 2} 
for (let item of mySet) console.log(item);

// logs the items in the order: 1, "some text", {"a": 1, "b": 2} 
for (let item of mySet.keys()) console.log(item);
 
// logs the items in the order: 1, "some text", {"a": 1, "b": 2} 
for (let item of mySet.values()) console.log(item);

// logs the items in the order: 1, "some text", {"a": 1, "b": 2} 
//(key and value are the same here)
for (let [key, value] of mySet.entries()) console.log(key);

// convert Set object to an Array object, with Array.from
var myArr = Array.from(mySet); // [1, "some text", {"a": 1, "b": 2}]

// the following will also work if run in an HTML document
mySet.add(document.body);
mySet.has(document.querySelector('body')); // true

// converting between Set and Array
mySet2 = new Set([1, 2, 3, 4]);
mySet2.size; // 4
[...mySet2]; // [1, 2, 3, 4]

// intersect can be simulated via 
var intersection = new Set([...set1].filter(x => set2.has(x)));

// difference can be simulated via
var difference = new Set([...set1].filter(x => !set2.has(x)));

// Iterate set entries with forEach
mySet.forEach(function(value) {
  console.log(value);
});

// 1
// 2
// 3
// 4

Υλοποιώντας βασικές λειτουργίες στα sets

Set.prototype.isSuperset = function(subset) {
    for (var elem of subset) {
        if (!this.has(elem)) {
            return false;
        }
    }
    return true;
}

Set.prototype.union = function(setB) {
    var union = new Set(this);
    for (var elem of setB) {
        union.add(elem);
    }
    return union;
}

Set.prototype.intersection = function(setB) {
    var intersection = new Set();
    for (var elem of setB) {
        if (this.has(elem)) {
            intersection.add(elem);
        }
    }
    return intersection;
}

Set.prototype.difference = function(setB) {
    var difference = new Set(this);
    for (var elem of setB) {
        difference.delete(elem);
    }
    return difference;
}

//Examples
var setA = new Set([1, 2, 3, 4]),
    setB = new Set([2, 3]),
    setC = new Set([3, 4, 5, 6]);

setA.isSuperset(setB); // => true
setA.union(setC); // => Set [1, 2, 3, 4, 5, 6]
setA.intersection(setC); // => Set [3, 4]
setA.difference(setC); // => Set [1, 2]

Συσχετισμός με αντικείμενα τύπου Array

var myArray = ['value1', 'value2', 'value3'];

// Use the regular Set constructor to transform an Array into a Set
var mySet = new Set(myArray);

mySet.has('value1'); // returns true

// Use the spread operator to transform a set into an Array.
console.log([...mySet]); // Will show you exactly the same Array as myArray

Συσχετισμός με Strings

var text = 'Indiana';

var mySet = new Set(text);  // Set {'I', 'n', 'd', 'i', 'a'}
mySet.size;  // 5

Specifications

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Set' in that specification.
Standard Initial definition.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Set' in that specification.
Living Standard  

Συμβατότητα με Browser

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support38121311258
new Set(iterable)381213 No259
new Set(null) Yes123711 Yes9
Set() without new throws Yes124211 Yes9
Key equality for -0 and 0381229 No259
add381213111258
clear38121911258
delete38121311258
entries381224 No258
forEach38122511258
has38121311258
prototype38121311258
size381219211258
values381224 No258
@@iterator Yes Yes

17 — 273

27 — 364 5

366

No Yes Yes
@@species511341 No3810
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic support3838121411258
new Set(iterable)38381214 No259
new Set(null) Yes Yes123711 Yes9
Set() without new throws Yes Yes124211 Yes9
Key equality for -0 and 038381229 No259
add3838121411258
clear3838121911258
delete3838121411258
entries38381224 No258
forEach3838122511258
has3838121411258
prototype3838121411258
size38381219211258
values38381224 No258
@@iterator Yes Yes Yes

17 — 273

27 — 364 5

366

No Yes Yes
@@species51511341 No3810

1. Returns 'undefined' instead of the 'Set' object.

2. From Firefox 13 to Firefox 18, the size property was implemented as a Set.prototype.size() method, this has been changed to a property in later versions conform to the ECMAScript 2015 specification.

3. Supported as iterator.

4. A placeholder property named @@iterator is used.

5. Supported as @@iterator.

6. The @@iterator symbol is implemented.

See also

Εθελοντές και ετικέτες εγγράφου

 Συνεισφέροντες σε αυτή τη σελίδα: SophieKrt
 Τελευταία ενημέρωση από: SophieKrt,