Object.groupBy()
åºçº¿
2024
æè¿å¯ç¨
èª March 2024 èµ·ï¼æ¤ç¹æ§å·²å¨ææ°æµè§å¨ä¸å¾å°æ¯æãä½å¨è¾æ§çè®¾å¤ææµè§å¨ä¸å¯è½æ æ³è¿è¡ã
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
夿³¨ï¼å¨æäºæµè§å¨çæäºçæ¬ä¸ï¼æ¤æ¹æ³è¢«å®ç°ä¸º Array.prototype.group() æ¹æ³ãç±äº web å
¼å®¹æ§é®é¢ï¼å®ç°å¨ä»¥éææ¹æ³å®ç°ãåè§æµè§å¨å
¼å®¹æ§è¡¨æ ¼ä»¥è·åæ´å¤ä¿¡æ¯ã
Object.groupBy() éææ¹æ³æ ¹æ®æä¾çåè°å½æ°è¿åçå符串å¼å¯¹ç»å®å¯è¿ä»£å¯¹è±¡ä¸çå
ç´ è¿è¡åç»ãè¿åç对象å
·ææ¯ä¸ªç»çåç¬å±æ§ï¼å
¶ä¸å
å«ç»ä¸çå
ç´ çæ°ç»ã
å½åç»åç§°å¯ä»¥ç¨å符串表示æ¶ï¼åºä½¿ç¨æ¤æ¹æ³ãå¦æä½ éè¦ä½¿ç¨æä¸ªä»»æå¼ä½ä¸ºé®æ¥å¯¹å
ç´ è¿è¡åç»ï¼è¯·æ¹ç¨ Map.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 = Object.groupBy(inventory, ({ quantity }) =>
quantity < 6 ? "restock" : "sufficient",
);
console.log(result.restock);
// [{ name: "bananas", type: "fruit", quantity: 5 }]
è¯æ³
Object.groupBy(items, callbackFn)
åæ°
items-
ä¸ä¸ªå°è¿è¡å ç´ åç»çå¯è¿ä»£å¯¹è±¡ï¼ä¾å¦
Arrayï¼ã callbackFn-
对å¯è¿ä»£å¯¹è±¡ä¸çæ¯ä¸ªå ç´ æ§è¡ç彿°ãå®åºè¯¥è¿åä¸ä¸ªå¼ï¼å¯ä»¥è¢«å¼ºå¶è½¬æ¢æå±æ§é®ï¼å符串æ symbolï¼ï¼ç¨äºæç¤ºå½åå ç´ æå±çåç»ãè¯¥å½æ°è¢«è°ç¨æ¶å°ä¼ å ¥ä»¥ä¸åæ°ï¼
è¿åå¼
ä¸ä¸ªå¸¦æææåç»å±æ§ç null ååå¯¹è±¡ï¼æ¯ä¸ªå±æ§é½åé
äºä¸ä¸ªå
å«ç¸å
³ç»å
ç´ çæ°ç»ã
æè¿°
Object.groupBy() 为å¯è¿ä»£å¯¹è±¡ä¸çæ¯ä¸ªå
ç´ è°ç¨ä¸æ¬¡æä¾ç callbackFn 彿°ãåè°å½æ°åºè¿åä¸ä¸ªå符串æ symbolï¼ä¸å±äºè¿ä¸¤ç§ç±»åçå¼ä¼è¢«å¼ºå¶è½¬æ¢ä¸ºå符串ï¼ï¼ç¨äºæç¤ºå
ç´ æå±çåç»ãcallbackFn çè¿åå¼ä¼è¢«ç¨ä½ Map.groupBy() è¿åç对象çé®ãæ¯ä¸ªé®é½æä¸ä¸ªç¸å
³èçæ°ç»ï¼å
¶ä¸å
å«åè°å½æ°è¿åç¸åå¼çææå
ç´ ã
è¿åç对象ä¸çå ç´ ååå§å¯è¿ä»£å¯¹è±¡ä¸çå ç´ ç¸åï¼ä¸æ¯æ·±æ·è´ï¼ãæ´æ¹å ç´ çå é¨ç»æå°åæ å¨åå§å¯è¿ä»£å¯¹è±¡åè¿åç对象ä¸ã
示ä¾
>ä½¿ç¨ Object.groupBy()
é¦å
ï¼æä»¬å®ä¹ä¸ä¸ªå
å«ä»£è¡¨åç§é£ååºåçå¯¹è±¡çæ°ç»ãæ¯ç§é£å齿ä¸ä¸ª type åä¸ä¸ª quantity 屿§ã
const inventory = [
{ name: "è¦ç¬", type: "è¬è", quantity: 5 },
{ name: "é¦è", type: "æ°´æ", quantity: 0 },
{ name: "å±±ç¾", type: "è", quantity: 23 },
{ name: "樱æ¡", type: "æ°´æ", quantity: 5 },
{ name: "é±¼", type: "è", quantity: 22 },
];
ä¸é¢çä»£ç æ ¹æ®å
ç´ ç type 屿§çå¼å¯¹å
ç´ è¿è¡åç»ã
const result = Object.groupBy(inventory, ({ type }) => type);
/* ç»ææ¯ï¼
{
è¬è: [
{ name: "è¦ç¬", type: "è¬è", quantity: 5 },
],
æ°´æ: [
{ name: "é¦è", type: "æ°´æ", quantity: 0 },
{ name: "樱æ¡", type: "æ°´æ", quantity: 5 }
],
è: [
{ name: "å±±ç¾", type: "è", quantity: 23 },
{ name: "é±¼", type: "è", quantity: 22 }
]
}
*/
ç®å¤´å½æ°æ¯æ¬¡è¢«è°ç¨æ¶é½åªè¿åæ¯ä¸ªæ°ç»å
ç´ ç type 屿§ã请注æï¼å½æ°åæ° { type } æ¯ä¸ä¸ªå½æ°åæ°ç对象解æè¯æ³çåºæ¬ç¤ºä¾ãè¿ä¼è§£æä¼ éä¸ºåæ°ç对象ç type 屿§ï¼å¹¶å°å
¶èµå¼ç»å½æ°ä½ä¸å为 type çåéãè¿æ¯ä¸ç§éå¸¸ç®æ´ç访é®å½æ°ä¸ç¸å
³å
ç´ çå¼çæ¹å¼ã
æä»¬è¿å¯ä»¥åå»ºæ ¹æ®å
ç´ çä¸ä¸ªæå¤ä¸ªå±æ§ä¸ç弿¨æçåç»ãä¸é¢æ¯ä¸ä¸ªé常类似ç示ä¾ï¼æ ¹æ® quantity åæ®µçå¼å°é¡¹ç®å为 ok æ restock ç»ã
function myCallback({ quantity }) {
return quantity > 5 ? "ok" : "restock";
}
const result2 = Object.groupBy(inventory, myCallback);
/* ç»ææ¯ï¼
{
restock: [
{ name: "è¦ç¬", type: "è¬è", quantity: 5 },
{ name: "é¦è", type: "æ°´æ", quantity: 0 },
{ name: "樱æ¡", type: "æ°´æ", quantity: 5 }
],
ok: [
{ name: "å±±ç¾", type: "è", quantity: 23 },
{ name: "é±¼", type: "è", quantity: 22 }
]
}
*/
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.groupby> |