Baseline 2024
Newly available
夿³¨ï¼ å¨æäºæµè§å¨çæäºçæ¬ä¸ï¼æ¤æ¹æ³è¢«å®ç°ä¸º Array.prototype.groupToMap()
æ¹æ³ãç±äº web å
¼å®¹æ§é®é¢ï¼å®ç°å¨ä»¥éææ¹æ³å®ç°ãåè§æµè§å¨å
¼å®¹æ§è¡¨æ ¼ä»¥è·åæ´å¤ä¿¡æ¯ã
Map.groupBy()
éææ¹æ³ä½¿ç¨æä¾çåè°å½æ°è¿åçå¼å¯¹ç»å®å¯è¿ä»£å¯¹è±¡ä¸çå
ç´ è¿è¡åç»ãæç»è¿åç Map
ä½¿ç¨æµè¯å½æ°è¿åçå¯ä¸å¼ä½ä¸ºé®ï¼å¯ç¨äºè·åæ¯ä¸ªç»ä¸çå
ç´ ç»æçæ°ç»ã
è¯¥æ¹æ³ä¸»è¦ç¨äºå¯¹ä¸å¯¹è±¡ç¸å
³çå
ç´ è¿è¡åç»ï¼ç¹å«æ¯å½è¯¥å¯¹è±¡å¯è½éæ¶é´èååæ¶ãå¦æå¯¹è±¡ä¸åï¼ä½ å¯ä»¥ä½¿ç¨å符串表示å®ï¼å¹¶ä½¿ç¨ Object.groupBy()
åç»å
ç´ ã
const inventory = [
{ name: "asparagus", type: "vegetables", quantity: 9 },
{ name: "bananas", type: "fruit", quantity: 5 },
{ name: "goat", type: "meat", quantity: 23 },
{ name: "cherries", type: "fruit", quantity: 12 },
{ name: "fish", type: "meat", quantity: 22 },
];
const restock = { restock: true };
const sufficient = { restock: false };
const result = Map.groupBy(inventory, ({ quantity }) =>
quantity < 6 ? restock : sufficient,
);
console.log(result.get(restock));
// [{ name: "bananas", type: "fruit", quantity: 5 }]
è¯æ³
Map.groupBy(items, callbackFn)
åæ°
items
ä¸ä¸ªå°è¿è¡å
ç´ åç»çå¯è¿ä»£å¯¹è±¡ï¼ä¾å¦ Array
ï¼ã
callbackFn
对å¯è¿ä»£å¯¹è±¡ä¸çæ¯ä¸ªå ç´ æ§è¡ç彿°ãå®åºè¯¥è¿åä¸ä¸ªå¼ï¼å¯¹è±¡æåå§ç±»åï¼æ¥è¡¨ç¤ºå½åå ç´ çåç»ãè¯¥å½æ°è¢«è°ç¨æ¶å°ä¼ å ¥ä»¥ä¸åæ°ï¼
element
æ°ç»ä¸å½åæ£å¨å¤ççå ç´ ã
index
æ£å¨å¤ççå ç´ å¨æ°ç»ä¸çç´¢å¼ã
ä¸ä¸ªå
å«äºæ¯ä¸ä¸ªç»çé®ç Map
å¯¹è±¡ï¼æ¯ä¸ªé®é½åé
äºä¸ä¸ªå
å«å
³èç»å
ç´ çæ°ç»ã
Map.groupBy()
为å¯è¿ä»£å¯¹è±¡ä¸çæ¯ä¸ªå
ç´ è°ç¨ä¸æ¬¡æä¾ç callbackFn
彿°ã该åè°å½æ°åºè¿åä¸ä¸ªå¼ï¼ç¨ä»¥è¡¨ç¤ºç¸å
³å
ç´ çåç»ãcallbackFn
è¿åçå¼ä¼è¢«ç¨ä½ Map.groupBy()
è¿åç Map
çé®ãæ¯ä¸ªé®é½æä¸ä¸ªç¸å
³èçæ°ç»ï¼å
¶ä¸å
å«åè°å½æ°è¿åç¸åå¼çææå
ç´ ã
è¿åç Map
ä¸çå
ç´ ååå§å¯è¿ä»£å¯¹è±¡ä¸çå
ç´ ç¸åï¼ä¸æ¯æ·±æ·è´ï¼ãæ´æ¹å
ç´ çå
é¨ç»æå°åæ å¨åå§å¯è¿ä»£å¯¹è±¡åè¿åç Map
ä¸ã
å½ä½ éè¦åç»ä¸ç¹å®å¯¹è±¡ç¸å
³çä¿¡æ¯æ¶ï¼æ¤æ¹æ³é常æç¨ãå 为å³ä½¿å¯¹è±¡è¢«ä¿®æ¹ï¼å®ä»å°ä½ä¸ºè¿åç Map
çé®ç»§ç»å·¥ä½ãå¦æä½ æ¹ä¸ºä¸ºå¯¹è±¡å建å符串表示形å¼ï¼å¹¶å¨ Object.groupBy()
ä¸å°å
¶ç¨ä½åç»é®ï¼åå¿
é¡»å¨å¯¹è±¡æ¹åæ¶ç»´æ¤åå§å¯¹è±¡åå
¶è¡¨ç¤ºä¹é´çæ å°ã
夿³¨ï¼ è¦è®¿é®è¿åç Map
ä¸çåç»ï¼å¿
é¡»ä½¿ç¨æåç¨ä½ Map
é®çç¸å对象ï¼å°½ç®¡ä½ å¯ä»¥ä¿®æ¹å
¶å±æ§ï¼ãä½ ä¸è½ä½¿ç¨å¦ä¸ä¸ªæ°å¥½å
·æç¸ååç§°å屿§ç对象ã
Map.groupBy
ä¸ä¼è¯»å this
å¼ãå®å¯ä»¥å¨ä»»ä½å¯¹è±¡ä¸è°ç¨ï¼å¹¶è¿åä¸ä¸ªæ°ç Map
å®ä¾ã
é¦å
ï¼æä»¬å®ä¹ä¸ä¸ªå
å«ä»£è¡¨åç§é£ååºåçå¯¹è±¡çæ°ç»ãæ¯ç§é£å齿ä¸ä¸ª type
åä¸ä¸ª quantity
屿§ã
const inventory = [
{ name: "è¦ç¬", type: "è¬è", quantity: 9 },
{ name: "é¦è", type: "æ°´æ", quantity: 5 },
{ name: "å±±ç¾", type: "è", quantity: 23 },
{ name: "樱æ¡", type: "æ°´æ", quantity: 12 },
{ name: "é±¼", type: "è", quantity: 22 },
];
ä¸é¢ç代ç 使ç¨ç®å¤´å½æ°ï¼å½æ°è¿åå为 restock
æ sufficient
ç对象é®ï¼å
·ä½åå³äºå
ç´ æ¯å¦æ»¡è¶³ quantity < 6
ï¼æ¥è°ç¨ Map.groupBy()
ãè¿åç result
对象æ¯ä¸ä¸ª Map
ï¼å æ¤æä»¬éè¦ä½¿ç¨é®è°ç¨ get()
æ¥è·åæ°ç»ã
const restock = { restock: true };
const sufficient = { restock: false };
const result = Map.groupBy(inventory, ({ quantity }) =>
quantity < 6 ? restock : sufficient,
);
console.log(result.get(restock));
// [{ name: "é¦è", type: "æ°´æ", quantity: 5 }]
请注æï¼å½æ°åæ° { quantity }
æ¯å½æ°åæ°ç对象解æè¯æ³çä¸ä¸ªåºæ¬ç¤ºä¾ãè¿ä¼è§£æä½ä¸ºåæ°ä¼ éç对象ç quantity
屿§ï¼å¹¶å°å
¶èµå¼ç»å½æ°ä½ä¸å为 quantity
çåéãè¿æ¯ä¸ç§éå¸¸ç®æ´ç访é®å½æ°ä¸ç¸å
³å
ç´ çå¼çæ¹å¼ã
Map
çé®å¨ä¿®æ¹åä»å¯ä»¥ä½¿ç¨ã使¯ï¼ä½ ä¸è½éæ°å建é®å¹¶ä»ç¶ä½¿ç¨å®ãå æ¤ï¼ä»»ä½éè¦ä½¿ç¨æ å°çå
容é½ä¿ç对å
¶é®çå¼ç¨æ¯é常éè¦çã
// é®è¢«ä¿®æ¹åä»å¯ä»¥ä½¿ç¨
restock["fast"] = true;
console.log(result.get(restock));
// [{ name: "é¦è", type: "æ°´æ", quantity: 5 }]
// ä¸è½ä½¿ç¨æ°çé®ï¼å³ä½¿å®å
·æç¸åçç»æï¼
const restock2 = { restock: true };
console.log(result.get(restock2)); // undefined
è§è æµè§å¨å
¼å®¹æ§ åè§
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