Bản dịch này chưa hoàn thành. Xin hãy giúp dịch bài viết này từ tiếng Anh.

Object Set cho phép bạn lưu các giá trị không trùng lặp,  giá trị đó có thể là primitive values hoặc một object reference.

Cú pháp

new Set([iterable]);

Tham số

iterable
Nếu iterable object hợp lệ, tất cả element của nó sẽ được thêm vào Set mới. null được coi như undefined.

Mô tả

Set object chứa một tập các giá trị. Bạn có thể loop qua các item bên trong theo thứ tự lúc khởi tạo. Một giá trị trong  Set chỉ xuất hiện một lần.

Giá trị giống nhau

Vì mỗi giá trị trong Set phải là duy nhất, nó sẽ kiểm tra các giá trị nào bị trùng. Theo như khai báo trước đây của ECMAScript, nó sẽ không dựa trên cùng thuật toán so sánh như thuật toán so sánh  === operator. Cụ thể, Set, +0 (thường được xem là bằng với -0) và -0 sẽ là 2 giá trị khác nhau. Tuy nhiên, theo khai báo mới nhất của ECMAScript 2015. "Giá trị của -0 và 0" sẽ phụ thuộc trình duyệt, xem browser compatability ở dưới.

Thêm nữa, NaN vàundefined cũng có thể được lưu trong Set. NaN được xem như giống với NaN (mặc dù NaN !== NaN).

Các thuộc tính

Set.length
Giá trị của thuộc tính length là 0.
get Set[@@species]
Hàm constructor dùng để tạo objects.
Set.prototype
Prototype của Set . Cho phép thêm các thuộc tính khác trên Set object.

Set instance

Tất cả Set instance kế thừa từ Set.prototype.

Các thuộc tính

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.

Các phương thức

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.

Ví dụ

Sử dụng Set Object

var mySet = new Set();

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

mySet.add({a: 1, b: 2}); // o đang reference đến một object khác => OK

mySet.has(1); // true
mySet.has(3); // false, 3 chưa được thêm vào trong 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); // xóa 5 khỏi set
mySet.has(5);    // false, 5 đã được xóa

mySet.size; // 4, độ dài thay đổi do chúng ta mới xóa 1 item

Loop qua Set

// log các item theo thứ tự order: 1, "some text", {"a": 1, "b": 2} 
for (let item of mySet) console.log(item);

// log các item theo thứ tự: 1, "some text", {"a": 1, "b": 2} 
for (let item of mySet.keys()) console.log(item);
 
// log các item theo thứ tự: 1, "some text", {"a": 1, "b": 2} 
for (let item of mySet.values()) console.log(item);

// log các item theo thứ tự: 1, "some text", {"a": 1, "b": 2} 
//(key và value giống nhau)
for (let [key, value] of mySet.entries()) console.log(key);

// convert Set object sang Array object, với Array.from
var myArr = Array.from(mySet); // [1, "some text", {"a": 1, "b": 2}]

// vẫn chạy nếu trên 1 HTML element
mySet.add(document.body);
mySet.has(document.querySelector("body")); // true

// convert giữa Set và Array
mySet2 = new Set([1,2,3,4]);
mySet2.size; // 4
[...mySet2]; // [1,2,3,4]

// filter
var intersection = new Set([...set1].filter(x => set2.has(x)));

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

// bằng forEach
mySet.forEach(function(value) {
  console.log(value);
});

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

Implementing basic set operations

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]

Relation with Array objects

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

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.
Draft  

Browser compatibility

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support

38 [1]

12 13 (13) 11 25 7.1
Constructor argument: new Set(iterable) 38 12 13 (13) No support 25 9.0
iterable 38 12 17 (17) No support 25 7.1
Set.clear() 38 12 19 (19) 11 25 7.1
Set.keys(), Set.values(), Set.entries() 38 12 24 (24) No support 25 7.1
Set.forEach() 38 12 25 (25) 11 25 7.1
Value equality for -0 and 0 38 12 29 (29) No support 25 9
Constructor argument: new Set(null) (Yes) 12 37 (37) 11 (Yes) 7.1
Monkey-patched add() in Constructor (Yes) 12 37 (37) No support (Yes) 9
Set[@@species] 51 13 41 (41) No support 38 10
Set() without new throws (Yes) 12 42 (42) 11 (Yes) 9
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support No support 38 [1] 13.0 (13) No support No support 8
Constructor argument: new Set(iterable) No support 38 13.0 (13) No support No support 9
iterable No support No support 17.0 (17) No support No support 8
Set.clear() No support 38 19.0 (19) No support No support 8
Set.keys(), Set.values(), Set.entries() No support 38 24.0 (24) No support No support 8
Set.forEach() No support 38 25.0 (25) No support No support 8
Value equality for -0 and 0 No support 38 29.0 (29) No support No support 9
Constructor argument: new Set(null) ? (Yes) 37.0 (37) ? ? 8
Monkey-patched add() in Constructor ? (Yes) 37.0 (37) ? ? 9
Set[@@species] ? ? 41.0 (41) ? ? 10
Set() without new throws ? ? 42.0 (42) ? ? 9

[1] The feature was available behind a preference from Chrome 31. In chrome://flags, activate the entry “Enable Experimental JavaScript”.

See also

Document Tags and Contributors

Nhãn: 
Những người đóng góp cho trang này: mdnwebdocs-bot, luubinhan, thevuong
Cập nhật lần cuối bởi: mdnwebdocs-bot,