Baseline Widely available *
Set
对象å
è®¸ä½ åå¨ä»»ä½ç±»åï¼æ 论æ¯åå§å¼è¿æ¯å¯¹è±¡å¼ç¨ï¼çå¯ä¸å¼ã
Set
对象æ¯å¼çåéï¼collectionï¼ãéåï¼setï¼ä¸çå
ç´ åªä¼åºç°ä¸æ¬¡ï¼å³éåä¸çå
ç´ æ¯å¯ä¸çãä½ å¯ä»¥æç
§æå
¥é¡ºåºè¿ä»£éåä¸çå
ç´ ãæå
¥é¡ºåºå¯¹åºäº add()
æ¹æ³æåå°æ¯ä¸ä¸ªå
ç´ æå
¥å°éåä¸ï¼å³ï¼è°ç¨ add()
æ¹æ³æ¶éåä¸ä¸åå¨ç¸åçå
ç´ ï¼ç顺åºã
è§èè¦æ±éåçå®ç°æ¯â对åéä¸çå ç´ çå¹³åè®¿é®æ¶é´ä¸éåä¸å ç´ çæ°é忬¡çº¿æ§å ³ç³»âãå æ¤ï¼å®å¯ä»¥å¨å é¨è¡¨ç¤ºä¸ºæ£åè¡¨ï¼æ¥æ¾çæ¶é´å¤æåº¦ä¸º O(1)ï¼ãæç´¢æ ï¼æ¥æ¾çæ¶é´å¤æåº¦ä¸º O(log(N))ï¼æä»»ä½å ¶ä»çæ¶é´å¤æåº¦ä½äº O(N) çæ°æ®ç»æã
å¼çç¸çå¼çç¸çæ¯åºäºé¶å¼ç¸çç®æ³çãï¼æ¾ä½¿ç¨ä¼å° 0
å -0
è§ä¸ºä¸åå¼çåå¼ç®æ³ãåè§æµè§å¨å
¼å®¹æ§ãï¼è¿æå³ç NaN
å NaN
ä¼è¢«è§ä¸ºæ¯ç¸åçå¼ï¼å³ä½¿ NaN !== NaN
ï¼ï¼èææå
¶ä»çå¼ååºäº ===
è¿ç®ç¬¦çè¯ä¹è¿è¡ç¸çæ¯è¾ã
has
æ¹æ³æ£æ¥æä¸ªå¼æ¯å¦å¨éåä¸ï¼å
¶éç¨çæ¹å¼ç平忶鴿¯é个æµè¯å
åæ·»å å°éåä¸çå
ç´ æ´å¿«ãç¹å«æ¯å½ä¸ä¸ªæ°ç»çé¿åº¦ï¼length
ï¼çäºéåç大å°ï¼size
ï¼æ¶ï¼è¿æ¯ Array.prototype.includes
æ¹æ³çå¹³åé度æ´å¿«ã
Set
对象æä¾äºä¸äºæ¹æ³ï¼å
è®¸ä½ åè¿è¡æ°å¦è¿ç®ä¸æ ·ç»åéåãè¿äºæ¹æ³å
æ¬ï¼
为äºä½¿è¿äºæ¹æ³æ´å
·éç¨æ§ï¼å®ä»¬ä¸ä»
æ¥å Set
对象ï¼è¿å¯ä»¥æ¥åä»»ä½ç±»éå对象ã
ææéåè¿ç®æ¹æ³è¦æ± this
æ¯ä¸ä¸ªå®é
ç Set
å®ä¾ï¼ä½å®ä»¬çåæ°åªéè¦æ¯ç±»éå对象ãç±»éåå¯¹è±¡æ¯æä¾ä»¥ä¸å
容ç对象ï¼
size
屿§ï¼å
å«ä¸ä¸ªæ°åãhas()
æ¹æ³ï¼æ¥åä¸ä¸ªå
ç´ å¹¶è¿åä¸ä¸ªå¸å°å¼ãkeys()
æ¹æ³ï¼è¿åä¸ä¸ªéåä¸çå
ç´ çè¿ä»£å¨ãä¾å¦ï¼Map
对象æ¯ç±»éå对象ï¼å 为å®ä»¬ä¹å
·æ size
ãhas()
å keys()
ï¼å æ¤å¨éåæ¹æ³ä¸ä½¿ç¨æ¶ï¼å®ä»¬è¡¨ç°å¾å°±åé®çéåï¼
const a = new Set([1, 2, 3]);
const b = new Map([
[1, "ä¸"],
[2, "äº"],
[4, "å"],
]);
console.log(a.union(b)); // Set(4) {1, 2, 3, 4}
夿³¨ï¼ ç±»éååè®®è°ç¨ keys()
æ¹æ³è䏿¯ [Symbol.iterator]()
æ¥çæå
ç´ ãè¿æ¯ä¸ºäºä½¿ Map æä¸ºææçç±»éå对象ï¼å ä¸ºå¯¹äº Mapï¼è¿ä»£å¨çææ¡ç®ï¼è has()
æ¹æ³æ¥åé®ã
æ°ç»ä¸æ¯ç±»éå对象ï¼å 为å®ä»¬æ²¡æ has()
æ¹æ³æ size
屿§ï¼å¹¶ä¸å®ä»¬ç keys()
æ¹æ³çæç´¢å¼è䏿¯å
ç´ ãWeakSet
对象ä¹ä¸æ¯ç±»éå对象ï¼å 为å®ä»¬æ²¡æ keys()
æ¹æ³ã
æµè§å¨ç±» Set
å¯¹è±¡ï¼æâç±»éå对象âï¼æ¯è¡ä¸ºä¸ Set
类似ç Web API æ¥å£ã
å°±å Set
䏿 ·ï¼å
ç´ å¯ä»¥æç
§å®ä»¬è¢«æ·»å å°å¯¹è±¡ç顺åºè¿è¡è¿ä»£ãç±» Set
å¯¹è±¡ä¹æä¸ Set
ç¸ååç§°åè¡ä¸ºç屿§åæ¹æ³ã使¯ï¼ä¸ Set
ä¸åçæ¯ï¼åè
åªå
许æ¯ä¸ªæ¡ç®ç¹å®çé¢å®ä¹ç±»åã
å
许çç±»åç±è§èç IDL å®ä¹ç»åºãä¾å¦ï¼GPUSupportedFeatures
æ¯ä¸ä¸ªç±» Set
对象ï¼å®å¿
须以å符串为é®/å¼ãè§èç IDL 对å
¶çå®ä¹å¦ä¸ï¼
interface GPUSupportedFeatures {
readonly setlike<DOMString>;
};
ç±» Set
对象æ¯åªè¯»æå¯è¯»åçï¼åè§ä¸é¢ç IDL ä¸ç readonly
å
³é®åï¼ã
Set
对象å
·æ size
屿§å以䏿¹æ³ï¼entries()
ãforEach()
ãhas()
ãkeys()
ãvalues()
å [Symbol.iterator]()
ãSet
对象æ¤å¤è¿å
·æä»¥ä¸æ¹æ³ï¼clear()
ãdelete()
å add()
ãé¤äºå¯¹æ¡ç®ç±»åçéå¶å¤ï¼æ¹æ³å屿§çè¡ä¸ºä¸ Set
ä¸ççææåç¸åã
以䏿¯åªè¯»çç±» Set
æµè§å¨å¯¹è±¡ç示ä¾ï¼
以䏿¯å¯åçç±» Set
æµè§å¨å¯¹è±¡ç示ä¾ï¼
Set()
å建ä¸ä¸ªæ°ç Set
对象ã
Set[Symbol.species]
ç¨äºå建派ç对象çæé 彿°ã
è¿äºå±æ§å®ä¹äº Set.prototype
ä¸ï¼ä¸ç±ææ Set
å®ä¾å
±äº«ã
Set.prototype.constructor
å建示ä¾å¯¹è±¡çæé 彿°ãå¯¹äº Set
å®ä¾ï¼å
¶åå§å¼ä¸º Set
æé 彿°ã
Set.prototype.size
è¿å Set
对象ä¸å¼çæ°éã
Set.prototype[Symbol.toStringTag]
[Symbol.toStringTag]
屿§çåå§å¼ä¸ºå符串 "Set"
ãè¯¥å±æ§ç¨äº Object.prototype.toString()
ã
Set.prototype.add()
妿 Set
ä¸å°ä¸åå¨å
·æç¸åå¼çå
ç´ ï¼åå¨ Set
å¯¹è±¡ä¸æå
¥ä¸ä¸ªæ°çå
·ææå®å¼çå
ç´ ã
Set.prototype.clear()
ä» Set
对象ä¸ç§»é¤ææå
ç´ ã
Set.prototype.delete()
ç§»é¤ä¸ value
å
³èçå
ç´ ï¼å¹¶è¿åä¸ä¸ªå¸å°å¼æ¥è¡¨ç¤ºæ¯å¦ç§»é¤æåãSet.prototype.has(value)
ä¼å¨æ¤ä¹åè¿å false
ã
Set.prototype.difference()
æ¥åä¸ä¸ªéåå¹¶è¿åä¸ä¸ªæ°éåï¼è¯¥éåå 嫿¤éåä¸ä½ä¸å¨ç»å®éåä¸çå ç´ ã
Set.prototype.entries()
è¿åä¸ä¸ªæ°çè¿ä»£å¨å¯¹è±¡ï¼è¯¥å¯¹è±¡å
å« Set
对象ä¸ç代表æ¯ä¸ªå
ç´ ç [value, value]
æ°ç»ãè¿ä¸ Map
对象类似ï¼å æ¤ Set
çæ¯ä¸ªæ¡ç®ç key å value é½ç¸åã
Set.prototype.forEach()
æç
§å¼æå
¥ç顺åºä¸º Set
对象ä¸çæ¯ä¸ªå¼è°ç¨ä¸æ¬¡ callbackFn
ã妿æä¾äº thisArg
åæ°ï¼å®å°è¢«ç¨ä½æ¯æ¬¡è°ç¨ callbackFn
æ¶ç this
å¼ã
Set.prototype.has()
è¿åä¸ä¸ªå¸å°å¼ï¼è¡¨ç¤ºç»å®å¼å¨ Set
å¯¹è±¡ä¸æ¯å¦åå¨ã
Set.prototype.intersection()
æ¥åä¸ä¸ªéåå¹¶è¿åä¸ä¸ªæ°éåï¼è¯¥éåå å«åæ¶å¨æ¤éååç»å®éåä¸çå ç´ ã
Set.prototype.isDisjointFrom()
æ¥åä¸ä¸ªéåå¹¶è¿åä¸ä¸ªå¸å°å¼ï¼æç¤ºæ¤é忝å¦ä¸ç»å®éåæ²¡æå ±åå ç´ ã
Set.prototype.isSubsetOf()
æ¥åä¸ä¸ªéåå¹¶è¿åä¸ä¸ªå¸å°å¼ï¼æç¤ºæ¤éåçææå ç´ æ¯å¦é½å¨ç»å®éåä¸ã
Set.prototype.isSupersetOf()
æ¥åä¸ä¸ªéåå¹¶è¿åä¸ä¸ªå¸å°å¼ï¼æç¤ºç»å®éåçææå ç´ æ¯å¦é½å¨æ¤éåä¸ã
Set.prototype.keys()
Set.prototype.values()
çå«åã
Set.prototype.symmetricDifference()
æ¥åä¸ä¸ªéåå¹¶è¿åä¸ä¸ªæ°éåï¼è¯¥éåå å«å¨æ¤éåæç»å®éåä¸ä½ä¸å¨å¦ä¸è ä¸çå ç´ ã
Set.prototype.union()
æ¥åä¸ä¸ªéåå¹¶è¿åä¸ä¸ªæ°éåï¼è¯¥éåå å«å¨æ¤éåæç»å®éåä¸çå ç´ ã
Set.prototype.values()
è¿åä¸ä¸ªæ°çè¿ä»£å¨å¯¹è±¡ï¼è¯¥å¯¹è±¡ææå
¥é¡ºåºçæ Set
å¯¹è±¡ä¸æ¯ä¸ªå
ç´ çå¼ã
Set.prototype[Symbol.iterator]()
è¿åä¸ä¸ªæ°çè¿ä»£å¨å¯¹è±¡ï¼è¯¥å¯¹è±¡ææå
¥é¡ºåºçæ Set
å¯¹è±¡ä¸æ¯ä¸ªå
ç´ çå¼ã
const mySet1 = new Set();
mySet1.add(1); // Set(1) { 1 }
mySet1.add(5); // Set(2) { 1, 5 }
mySet1.add(5); // Set(2) { 1, 5 }
mySet1.add("some text"); // Set(3) { 1, 5, 'some text' }
const o = { a: 1, b: 2 };
mySet1.add(o);
mySet1.add({ a: 1, b: 2 }); // o æ¯ä¸å对象çå¼ç¨ï¼æä»¥è¿æ¯å¯ä»¥ç
mySet1.has(1); // true
mySet1.has(3); // falseï¼å 为并æªå° 3 æ·»å å°éåä¸
mySet1.has(5); // true
mySet1.has(Math.sqrt(25)); // true
mySet1.has("Some Text".toLowerCase()); // true
mySet1.has(o); // true
mySet1.size; // 5
mySet1.delete(5); // ä»éåä¸ç§»é¤ 5
mySet1.has(5); // falseï¼5 å·²ä»éåä¸ç§»é¤
mySet1.size; // 4ï¼å 为æä»¬ååç§»é¤äºä¸ä¸ªå¼
mySet1.add(5); // Set(5) { 1, 'some text', {...}, {...}, 5 }ââå
åå é¤çå
ç´ ä¼ä½ä¸ºæ°çå
ç´ è¢«æ·»å ï¼ä¸ä¼ä¿çå é¤åçåå§ä½ç½®
console.log(mySet1); // Set(5) { 1, "some text", {â¦}, {â¦}, 5 }
è¿ä»£éå
è¿ä»£ä¼æå ç´ çæå ¥é¡ºåºè®¿é®éåä¸çå ç´ ã
for (const item of mySet1) {
console.log(item);
}
// 1ã"some text"ã{ "a": 1, "b": 2 }ã{ "a": 1, "b": 2 }ã5
for (const item of mySet1.keys()) {
console.log(item);
}
// 1ã"some text"ã{ "a": 1, "b": 2 }ã{ "a": 1, "b": 2 }ã5
for (const item of mySet1.values()) {
console.log(item);
}
// 1ã"some text"ã{ "a": 1, "b": 2 }ã{ "a": 1, "b": 2 }ã5
// é®å弿¯ç¸åç
for (const [key, value] of mySet1.entries()) {
console.log(key);
}
// 1ã"some text"ã{ "a": 1, "b": 2 }ã{ "a": 1, "b": 2 }ã5
// ä½¿ç¨ Array.from å° Set 对象转æ¢ä¸ºæ°ç»å¯¹è±¡
const myArr = Array.from(mySet1); // [1, "some text", {"a": 1, "b": 2}, {"a": 1, "b": 2}, 5]
// å¦æå¨ HTML ææ¡£ä¸ä½¿ç¨ï¼ä¹å¯ä»¥ï¼
mySet1.add(document.body);
mySet1.has(document.querySelector("body")); // true
// å¨ Set å Array ä¹é´è½¬æ¢
const mySet2 = new Set([1, 2, 3, 4]);
console.log(mySet2.size); // 4
console.log([...mySet2]); // [1, 2, 3, 4]
// å¯ä»¥éè¿å¦ä¸ä»£ç æ¨¡ææ±äº¤é
const intersection = new Set([...mySet1].filter((x) => mySet2.has(x)));
// å¯ä»¥éè¿å¦ä¸ä»£ç æ¨¡ææ±å·®é
const difference = new Set([...mySet1].filter((x) => !mySet2.has(x)));
// ä½¿ç¨ forEach() è¿ä»£éåä¸çæ¡ç®
mySet2.forEach((value) => {
console.log(value);
});
// 1
// 2
// 3
// 4
å®ç°åºæ¬éåæä½
function isSuperset(set, subset) {
for (const elem of subset) {
if (!set.has(elem)) {
return false;
}
}
return true;
}
function union(setA, setB) {
const _union = new Set(setA);
for (const elem of setB) {
_union.add(elem);
}
return _union;
}
function intersection(setA, setB) {
const _intersection = new Set();
for (const elem of setB) {
if (setA.has(elem)) {
_intersection.add(elem);
}
}
return _intersection;
}
function symmetricDifference(setA, setB) {
const _difference = new Set(setA);
for (const elem of setB) {
if (_difference.has(elem)) {
_difference.delete(elem);
} else {
_difference.add(elem);
}
}
return _difference;
}
function difference(setA, setB) {
const _difference = new Set(setA);
for (const elem of setB) {
_difference.delete(elem);
}
return _difference;
}
// 示ä¾
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 3]);
const setC = new Set([3, 4, 5, 6]);
isSuperset(setA, setB); // è¿å true
union(setA, setC); // è¿å Set {1, 2, 3, 4, 5, 6}
intersection(setA, setC); // è¿å Set {3, 4}
symmetricDifference(setA, setC); // è¿å Set {1, 2, 5, 6}
difference(setA, setC); // è¿å Set {1, 2}
䏿°ç»çå
³ç³»
const myArray = ["value1", "value2", "value3"];
// 使ç¨å¸¸è§ç Set æé 彿°å° Array 转æ¢ä¸º Set
const mySet = new Set(myArray);
mySet.has("value1"); // è¿å true
// 使ç¨å±å¼è¯æ³å° Set 转æ¢ä¸º Arrayã
console.log([...mySet]); // å°æ¾ç¤ºä¸ myArray å®å
¨ç¸åçæ°ç»
æ°ç»å»é
// ç¨äºä»æ°ç»ä¸å é¤éå¤å
ç´
const numbers = [2, 13, 4, 4, 2, 13, 13, 4, 4, 5, 5, 6, 6, 7, 5, 32, 13, 4, 5];
console.log([...new Set(numbers)]); // [2, 13, 4, 5, 6, 7, 32]
ä¸å符串çå
³ç³»
// 大å°åææï¼å
å« "F" å "f"ï¼
new Set("Firefox"); // Set(7) [ "F", "i", "r", "e", "f", "o", "x" ]
// 忽ç¥éå¤é¡¹ï¼"f" åºç°äºä¸¤æ¬¡ï¼ä½æ¯åªå
å«ä¸ä¸ªï¼
new Set("firefox"); // Set(6) [ "f", "i", "r", "e", "o", "x" ]
使ç¨éåæ¥ç¡®ä¿ä¸åå¼çå¯ä¸æ§
const array = Array.from(document.querySelectorAll("[id]")).map((e) => e.id);
const set = new Set(array);
console.assert(set.size === array.length);
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4