让æä»¬åå°å½æ°ï¼è¿è¡æ´æ·±å ¥çç ç©¶ã
æä»¬ç第ä¸ä¸ªä¸»é¢æ¯ éå½ï¼recursionï¼ã
å¦æä½ ä¸æ¯åæ¥è§¦ç¼ç¨ï¼é£ä¹ä½ å¯è½å·²ç»å¾çæå®äºï¼é£ä¹ä½ å¯ä»¥è·³è¿è¿ä¸ç« ã
é彿¯ä¸ç§ç¼ç¨æ¨¡å¼ï¼å¨ä¸ä¸ªä»»å¡å¯ä»¥èªç¶å°æåæå¤ä¸ªç¸åç±»å使´ç®åçä»»å¡çæ åµä¸é常æç¨ãæè ï¼å¨ä¸ä¸ªä»»å¡å¯ä»¥ç®å为ä¸ä¸ªç®åçè¡ä¸ºå ä¸è¯¥ä»»å¡çä¸ä¸ªæ´ç®åçåä½çæ¶åå¯ä»¥ä½¿ç¨ãæè ï¼å°±åæä»¬å¾å¿«ä¼çå°ç飿 ·ï¼å¤çæäºæ°æ®ç»æã
å½ä¸ä¸ªå½æ°è§£å³ä¸ä¸ªä»»å¡æ¶ï¼å¨è§£å³çè¿ç¨ä¸å®å¯ä»¥è°ç¨å¾å¤å ¶å®å½æ°ãå¨é¨åæ åµä¸ï¼å½æ°ä¼è°ç¨ èªèº«ãè¿å°±æ¯æè°ç éå½ã
ä¸¤ç§æèæ¹å¼
ç®åèµ·è§ï¼è®©æä»¬åä¸ä¸ªå½æ° pow(x, n)ï¼å®å¯ä»¥è®¡ç® x ç n 次æ¹ãæ¢å¥è¯è¯´å°±æ¯ï¼x ä¹ä»¥èªèº« n 次ã
pow(2, 2) = 4
pow(2, 3) = 8
pow(2, 4) = 16
æä¸¤ç§å®ç°æ¹å¼ã
-
è¿ä»£æè·¯ï¼ä½¿ç¨
for循ç¯ï¼function pow(x, n) { let result = 1; // å¨å¾ªç¯ä¸ï¼ç¨ x ä¹ä»¥ result n 次 for (let i = 0; i < n; i++) { result *= x; } return result; } alert( pow(2, 3) ); // 8 -
éå½æè·¯ï¼ç®åä»»å¡ï¼è°ç¨èªèº«ï¼
function pow(x, n) { if (n == 1) { return x; } else { return x * pow(x, n - 1); } } alert( pow(2, 3) ); // 8
请注æï¼éå½åä½å¨æ¬è´¨ä¸æ¯ä¸åçã
å½ pow(x, n) 被è°ç¨æ¶ï¼æ§è¡åä¸ºä¸¤ä¸ªåæ¯ï¼
if n==1 = x
/
pow(x, n) =
\
else = x * pow(x, n - 1)
- 妿
n == 1ï¼ææäºæ é½ä¼å¾ç®åï¼è¿å«å åºç¡ çéå½ï¼å 为å®ä¼ç«å³äº§çææ¾çç»æï¼pow(x, 1)çäºxã - å¦åï¼æä»¬å¯ä»¥ç¨
x * pow(x, n - 1)表示pow(x, n)ã卿°å¦éï¼å¯è½ä¼å为xn = x * xn-1ãè¿å«å ä¸ä¸ªé彿¥éª¤ï¼æä»¬å°ä»»å¡è½¬å为æ´ç®åçè¡ä¸ºï¼xç乿³ï¼åæ´ç®åçå类任å¡çè°ç¨ï¼å¸¦ææ´å°çnçpowè¿ç®ï¼ãæ¥ä¸æ¥çæ¥éª¤å°å ¶è¿ä¸æ¥ç®åï¼ç´å°nè¾¾å°1ã
æä»¬ä¹å¯ä»¥è¯´ pow éå½å°è°ç¨èªèº« ç´å° n == 1ã
æ¯å¦ï¼ä¸ºäºè®¡ç® pow(2, 4)ï¼éå½åä½ç»è¿äºä¸é¢å 个æ¥éª¤ï¼
pow(2, 4) = 2 * pow(2, 3)pow(2, 3) = 2 * pow(2, 2)pow(2, 2) = 2 * pow(2, 1)pow(2, 1) = 2
å æ¤ï¼éå½å°å½æ°è°ç¨ç®å为ä¸ä¸ªæ´ç®åç彿°è°ç¨ï¼ç¶ååå°å ¶ç®å为ä¸ä¸ªæ´ç®åç彿°ï¼ä»¥æ¤ç±»æ¨ï¼ç´å°ç»æå徿¾èæè§ã
éå½è§£é常æ¯è¿ä»£è§£æ´çã
å¨è¿å¿ï¼æä»¬å¯ä»¥ä½¿ç¨æ¡ä»¶è¿ç®ç¬¦ ? è䏿¯ if è¯å¥ï¼ä»è使 pow(x, n) æ´ç®æ´å¹¶ä¸å¯è¯»æ§ä¾ç¶å¾é«ï¼
function pow(x, n) {
return (n == 1) ? x : (x * pow(x, n - 1));
}
æå¤§çåµå¥è°ç¨æ¬¡æ°ï¼å
æ¬é¦æ¬¡ï¼è¢«ç§°ä¸º é彿·±åº¦ã卿们çä¾åä¸ï¼å®æ£å¥½çäº nã
æå¤§é彿·±åº¦åéäº JavaScript 弿ã对æä»¬æ¥è¯´ï¼å¼æå¨æå¤§è¿ä»£æ·±åº¦ä¸º 10000 å以䏿¶æ¯å¯é çï¼æäºå¼æå¯è½å 许æ´å¤§çæå¤§æ·±åº¦ï¼ä½æ¯å¯¹äºå¤§å¤æ°å¼ææ¥è¯´ï¼100000 å¯è½å°±è¶ åºéå¶äºãæä¸äºèªå¨ä¼åè½å¤å¸®å©åè½»è¿ç§æ åµï¼å°¾é¨è°ç¨ä¼åï¼ï¼ä½ç®åå®ä»¬è¿æ²¡æè¢«å®å ¨æ¯æï¼åªè½ç¨äºç®ååºæ¯ã
è¿å°±éå¶äºéå½çåºç¨ï¼ä½æ¯éå½ä»ç¶è¢«å¹¿æ³ä½¿ç¨ãæå¾å¤ä»»å¡ä¸ï¼éå½æç»´æ¹å¼ä¼ä½¿ä»£ç æ´ç®åï¼æ´å®¹æç»´æ¤ã
æ§è¡ä¸ä¸æåå æ
ç°å¨æä»¬æ¥ç ç©¶ä¸ä¸éå½è°ç¨æ¯å¦ä½å·¥ä½çã为æ¤ï¼æä»¬ä¼å çç彿°åºå±çå·¥ä½åçã
æå ³æ£å¨è¿è¡ç彿°çæ§è¡è¿ç¨çç¸å ³ä¿¡æ¯è¢«åå¨å¨å ¶ æ§è¡ä¸ä¸æ ä¸ã
æ§è¡ä¸ä¸æ æ¯ä¸ä¸ªå
鍿°æ®ç»æï¼å®å
嫿å
³å½æ°æ§è¡æ¶ç详ç»ç»èï¼å½åæ§å¶æµæå¨çä½ç½®ï¼å½åçåéï¼this çå¼ï¼æ¤å¤æä»¬ä¸ä½¿ç¨å®ï¼ï¼ä»¥åå
¶å®çä¸äºå
é¨ç»èã
ä¸ä¸ªå½æ°è°ç¨ä» å ·æä¸ä¸ªä¸å ¶ç¸å ³èçæ§è¡ä¸ä¸æã
å½ä¸ä¸ªå½æ°è¿è¡åµå¥è°ç¨æ¶ï¼å°åç以ä¸çäºå¿ï¼
- å½å彿°è¢«æåï¼
- ä¸å®å ³èçæ§è¡ä¸ä¸æè¢«ä¸ä¸ªå«å æ§è¡ä¸ä¸æå æ çç¹æ®æ°æ®ç»æä¿åï¼
- æ§è¡åµå¥è°ç¨ï¼
- åµå¥è°ç¨ç»æåï¼ä»å æ 䏿¢å¤ä¹åçæ§è¡ä¸ä¸æï¼å¹¶ä»åæ¢çä½ç½®æ¢å¤å¤é¨å½æ°ã
让æä»¬çç pow(2, 3) è°ç¨æé´é½åçäºä»ä¹ã
pow(2, 3)
å¨è°ç¨ pow(2, 3) çå¼å§ï¼æ§è¡ä¸ä¸æï¼contextï¼ä¼åå¨åéï¼x = 2, n = 3ï¼æ§è¡æµç¨å¨å½æ°ç第 1 è¡ã
æä»¬å°å ¶æç»å¦ä¸ï¼
- Context: { x: 2, n: 3, at line 1 } pow(2, 3)
è¿æ¯å½æ°å¼å§æ§è¡çæ¶åãæ¡ä»¶ n == 1 ç»æä¸ºåï¼æä»¥æ§è¡æµç¨è¿å
¥ if ç第äºåæ¯ã
function pow(x, n) {
if (n == 1) {
return x;
} else {
return x * pow(x, n - 1);
}
}
alert( pow(2, 3) );
åéç¸åï¼ä½æ¯è¡æ¹åäºï¼å æ¤ç°å¨çä¸ä¸ææ¯ï¼
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
为äºè®¡ç® x * pow(x, n - 1)ï¼æä»¬éè¦ä½¿ç¨å¸¦ææ°åæ°çæ°ç pow åè°ç¨ pow(2, 2)ã
pow(2, 2)
ä¸ºäºæ§è¡åµå¥è°ç¨ï¼JavaScript ä¼å¨ æ§è¡ä¸ä¸æå æ ä¸è®°ä½å½åçæ§è¡ä¸ä¸æã
è¿éæä»¬è°ç¨ç¸åç彿° powï¼ä½è¿ç»å¯¹æ²¡é®é¢ãææå½æ°çå¤ç齿¯ä¸æ ·çï¼
- å½åä¸ä¸æè¢«âè®°å½âå¨å æ çé¡¶é¨ã
- 为åè°ç¨å建æ°çä¸ä¸æã
- å½åè°ç¨ç»æå ââ åä¸ä¸ªä¸ä¸æè¢«ä»å æ ä¸å¼¹åºï¼å¹¶ç»§ç»æ§è¡ã
ä¸é¢æ¯è¿å
¥åè°ç¨ pow(2, 2) æ¶çä¸ä¸æå æ ï¼
- Context: { x: 2, n: 2, at line 1 } pow(2, 2)
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
æ°çå½åæ§è¡ä¸ä¸æä½äºé¡¶é¨ï¼ç²ä½æ¾ç¤ºï¼ï¼ä¹åè®°ä½çä¸ä¸æä½äºä¸æ¹ã
彿们宿åè°ç¨å ââ å¾å®¹ææ¢å¤ä¸ä¸ä¸ªä¸ä¸æï¼å ä¸ºå®æ¢ä¿çäºåéï¼ä¹ä¿çäºå½æ¶æå¨ä»£ç çç¡®åä½ç½®ã
å¨ä¸é¢çå¾ä¸ï¼æä»¬ä½¿ç¨âè¡ï¼lineï¼âä¸è¯ï¼å ä¸ºå¨æä»¬ç示ä¾ä¸ï¼æ¯ä¸è¡åªæä¸ä¸ªåè°ç¨ï¼ä½é常ä¸è¡ä»£ç å¯è½ä¼å
å«å¤ä¸ªåè°ç¨ï¼ä¾å¦ pow(â¦) + pow(â¦) + somethingElse(â¦)ã
å æ¤ï¼æ´åç¡®å°è¯´ï¼æ§è¡æ¯âå¨åè°ç¨ä¹åç«å³æ¢å¤âçã
pow(2, 1)
éå¤è¯¥è¿ç¨ï¼å¨ç¬¬ 5 è¡çææ°çåè°ç¨ï¼ç°å¨çåæ°æ¯ x=2, n=1ã
æ°çæ§è¡ä¸ä¸æè¢«å建ï¼åä¸ä¸ªè¢«åå ¥å æ é¡¶é¨ï¼
- Context: { x: 2, n: 1, at line 1 } pow(2, 1)
- Context: { x: 2, n: 2, at line 5 } pow(2, 2)
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
æ¤æ¶ï¼æ 2 个æ§çä¸ä¸æå 1 个å½åæ£å¨è¿è¡ç pow(2, 1) çä¸ä¸æã
åºå£
卿§è¡ pow(2, 1) æ¶ï¼ä¸ä¹åçä¸åï¼æ¡ä»¶ n == 1 为çï¼å æ¤ if ç第ä¸ä¸ªåæ¯çæï¼
function pow(x, n) {
if (n == 1) {
return x;
} else {
return x * pow(x, n - 1);
}
}
æ¤æ¶ä¸åææ´å¤çåµå¥è°ç¨ï¼æä»¥å½æ°ç»æï¼è¿å 2ã
彿°å®æåï¼å°±ä¸åéè¦å ¶æ§è¡ä¸ä¸æäºï¼å æ¤å®è¢«ä»å åä¸ç§»é¤ãåä¸ä¸ªä¸ä¸ææ¢å¤å°å æ çé¡¶é¨ï¼
- Context: { x: 2, n: 2, at line 5 } pow(2, 2)
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
æ¢å¤æ§è¡ pow(2, 2)ã宿¥æåè°ç¨ pow(2, 1) çç»æï¼å æ¤ä¹å¯ä»¥å®æ x * pow(x, n - 1) çæ§è¡ï¼å¹¶è¿å 4ã
ç¶åï¼åä¸ä¸ªä¸ä¸æè¢«æ¢å¤ï¼
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
å½å®ç»æåï¼æä»¬å¾å°äºç»æ pow(2, 3) = 8ã
æ¬ç¤ºä¾ä¸çé彿·±åº¦ä¸ºï¼3ã
ä»ä¸é¢çæå¾æä»¬å¯ä»¥çåºï¼é彿·±åº¦çäºå æ ä¸ä¸ä¸æçæå¤§æ°éã
请注æå
åè¦æ±ãä¸ä¸æå ç¨å
åï¼å¨æä»¬ç示ä¾ä¸ï¼æ± n 次æ¹éè¦åå¨ n 个ä¸ä¸æï¼ä»¥ä¾æ´å°ç n å¼è¿è¡è®¡ç®ä½¿ç¨ã
è循ç¯ç®æ³æ´èçå åï¼
function pow(x, n) {
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
è¿ä»£ pow çè¿ç¨ä¸ä»
使ç¨äºä¸ä¸ªä¸ä¸æç¨äºä¿®æ¹ i å resultãå®çå
åè¦æ±å°ï¼å¹¶ä¸æ¯åºå®äºï¼ä¸ä¾èµäº nã
ä»»ä½éå½é½å¯ä»¥ç¨å¾ªç¯æ¥éåãé常循ç¯å使´ææã
â¦â¦ä½ææ¶éåå¾é¾ï¼å°¤å ¶æ¯å½æ°æ ¹æ®æ¡ä»¶ä½¿ç¨ä¸åçåè°ç¨ï¼ç¶ååå¹¶å®ä»¬çç»æï¼æè 忝æ¯è¾å¤ææ¶ãè䏿äºä¼åå¯è½æ²¡æå¿ è¦ï¼å®å ¨ä¸å¼å¾ã
éå½å¯ä»¥ä½¿ä»£ç æ´çï¼æ´æäºçè§£åç»´æ¤ã并䏿¯æ¯ä¸ªå°æ¹é½éè¦ä¼åï¼å¤§å¤æ°æ¶åæä»¬éè¦ä¸ä¸ªå¥½ä»£ç ï¼è¿å°±æ¯ä¸ºä»ä¹è¦ä½¿ç¨å®ã
éå½éå
éå½çå¦ä¸ä¸ªéè¦åºç¨å°±æ¯éå½éåã
å设æä»¬æä¸å®¶å ¬å¸ã人åç»æå¯ä»¥è¡¨ç¤ºä¸ºä¸ä¸ªå¯¹è±¡ï¼
let company = {
sales: [{
name: 'John',
salary: 1000
}, {
name: 'Alice',
salary: 1600
}],
development: {
sites: [{
name: 'Peter',
salary: 2000
}, {
name: 'Alex',
salary: 1800
}],
internals: [{
name: 'Jack',
salary: 1300
}]
}
};
æ¢å¥è¯è¯´ï¼ä¸å®¶å ¬å¸æå¾å¤é¨é¨ã
-
ä¸ä¸ªé¨é¨å¯è½æä¸ æ°ç» çåå·¥ï¼æ¯å¦ï¼
salesé¨é¨æ 2 ååå·¥ï¼John å Aliceã -
æè ï¼ä¸ä¸ªé¨é¨å¯è½ä¼åå为å 个åé¨é¨ï¼æ¯å¦
developmentæä¸¤ä¸ªåæ¯ï¼sitesåinternalsï¼å®ä»¬é½æèªå·±çåå·¥ã -
å½ä¸ä¸ªåé¨é¨å¢é¿æ¶ï¼å®ä¹æå¯è½è¢«æåæå 个åé¨é¨ï¼æå¢éï¼ã
ä¾å¦ï¼
sitesé¨é¨å¨æªæ¥å¯è½ä¼å为siteAåsiteBãå¹¶ä¸ï¼å®ä»¬å¯è½ä¼è¢«åç»§ç»æåãæ²¡æå¾ç¤ºï¼èè¡¥ä¸ä¸å§ã
ç°å¨ï¼å¦ææä»¬éè¦ä¸ä¸ªå½æ°æ¥è·åææèªèµçæ»æ°ãæä»¬è¯¥æä¹åï¼
è¿ä»£æ¹å¼å¹¶ä¸å®¹æï¼å ä¸ºç»ææ¯è¾å¤æãé¦å
æ³å°çå¯è½æ¯å¨ company ä¸ä½¿ç¨ for 循ç¯ï¼å¹¶å¨ç¬¬ä¸å±é¨åä¸åµå¥å循ç¯ã使¯ï¼ä¹åæä»¬éè¦æ´å¤çåå¾ªç¯æ¥éåå sites è¿æ ·çäºçº§é¨é¨çåå·¥â¦â¦ ç¶åï¼å°æ¥å¯è½ä¼åºç°å¨ä¸çº§é¨é¨ä¸çå¦ä¸ä¸ªå循ç¯ï¼å¦ææä»¬å¨ä»£ç ä¸å 3-4 级åµå¥çåå¾ªç¯æ¥éååä¸ªå¯¹è±¡ï¼ é£ä»£ç å¾å¤ä¸åã
æä»¬è¯è¯éå½å§ã
æä»¬å¯ä»¥çå°ï¼å½æä»¬ç彿°å¯¹ä¸ä¸ªé¨é¨æ±åæ¶ï¼æä¸¤ç§å¯è½çæ åµï¼
- è¦ä¹æ¯ç±ä¸ä¸ªäººå æ°ç» ææçâç®åâçé¨é¨ ââ è¿æ ·æä»¬å°±å¯ä»¥éè¿ä¸ä¸ªç®åçå¾ªç¯æ¥è®¡ç®èªèµçæ»åã
- æè
宿¯ä¸ä¸ªæ
N个åé¨é¨ç 对象 ââ é£ä¹æä»¬å¯ä»¥éè¿Nå±éå½è°ç¨æ¥æ±æ¯ä¸ä¸ªåé¨é¨çèªèµï¼ç¶åå°å®ä»¬åå¹¶èµ·æ¥ã
第ä¸ç§æ 嵿¯ç±äººåæ°ç»ææçé¨é¨ï¼è¿ç§æ åµå¾ç®åï¼æ¯æåºç¡çéå½ã
第äºç§æ 嵿¯æä»¬å¾å°çæ¯å¯¹è±¡ãé£ä¹å¯å°è¿ä¸ªå¤æç任塿åæéç¨äºæ´å°é¨é¨çåä»»å¡ãå®ä»¬å¯è½ä¼è¢«ç»§ç»æåï¼ä½å¾å¿«æè ä¸ä¹ 就伿åå°ç¬¬ä¸ç§æ åµé£æ ·ã
è¿ä¸ªç®æ³ä»ä»£ç æ¥çå¯è½ä¼æ´ç®åï¼
let company = { // æ¯åä¸ä¸ªå¯¹è±¡ï¼ç®æ´èµ·è§è¢«å缩äº
sales: [{name: 'John', salary: 1000}, {name: 'Alice', salary: 1600 }],
development: {
sites: [{name: 'Peter', salary: 2000}, {name: 'Alex', salary: 1800 }],
internals: [{name: 'Jack', salary: 1300}]
}
};
// ç¨æ¥å®æä»»å¡ç彿°
function sumSalaries(department) {
if (Array.isArray(department)) { // æ
åµï¼1ï¼
return department.reduce((prev, current) => prev + current.salary, 0); // æ±æ°ç»çå
} else { // æ
åµï¼2ï¼
let sum = 0;
for (let subdep of Object.values(department)) {
sum += sumSalaries(subdep); // éå½è°ç¨ææåé¨é¨ï¼å¯¹ç»ææ±å
}
return sum;
}
}
alert(sumSalaries(company)); // 7700
代ç å¾çä¹å®¹æçè§£ï¼å¸ææ¯è¿æ ·ï¼ï¼ãè¿å°±æ¯éå½çè½åãå®éç¨äºä»»ä½å±æ¬¡çåé¨é¨åµå¥ã
ä¸é¢æ¯è°ç¨å¾ï¼
æä»¬å¯ä»¥å¾å®¹æå°çå°å
¶åçï¼å¯¹äºå¯¹è±¡ {...} ä¼çæåè°ç¨ï¼èæ°ç» [...] æ¯é彿 çâå¶åâï¼å®ä»¬ä¼ç«å³ç»åºç»æã
请注æï¼è¯¥ä»£ç 使ç¨äºæä»¬ä¹å讲è¿çæºè½ç¹æ§ï¼smart featuresï¼ï¼
- å¨ æ°ç»æ¹æ³ 䏿们ä»ç»è¿çæ°ç»æ±åæ¹æ³
arr.reduceã - 使ç¨å¾ªç¯
for(val of Object.values(obj))éå对象çï¼å±æ§ï¼å¼ï¼Object.valuesè¿åå®ä»¬ç»æçæ°ç»ã
éå½ç»æ
éå½ï¼éå½å®ä¹çï¼æ°æ®ç»ææ¯ä¸ç§é¨åå¤å¶èªèº«çç»æã
æä»¬ååå¨ä¸é¢çå ¬å¸ç»æç示ä¾ä¸çè¿äºå®ã
ä¸ä¸ªå ¬å¸ç é¨é¨ æ¯ï¼
- äººåæ°ç»ã
- æä¸ä¸ª é¨é¨ 对象ã
å¯¹äº Web å¼åè èè¨ï¼ææ´çç¥çä¾åï¼HTML å XML ææ¡£ã
å¨ HTML ææ¡£ä¸ï¼ä¸ä¸ª HTML æ ç¾ å¯è½å æ¬ä»¥ä¸å 容ï¼
- ææ¬çæ®µã
- HTML 注éã
- å ¶å® HTML æ ç¾ï¼å®æå¯è½åå æ¬ææ¬çæ®µãæ³¨éæå ¶å®æ ç¾çï¼ã
è¿åæ¯ä¸ä¸ªéå½å®ä¹ã
ä¸ºäºæ´å¥½å°çè§£éå½ï¼æä»¬å讲ä¸ä¸ªéå½ç»æçä¾åâé¾è¡¨âï¼å¨æäºæ åµä¸ï¼å®å¯è½æ¯ä¼äºæ°ç»çéæ©ã
é¾è¡¨
æ³è±¡ä¸ä¸ï¼æä»¬è¦åå¨ä¸ä¸ªæåºç对象å表ã
æ£å¸¸ç鿩伿¯ä¸ä¸ªæ°ç»ï¼
let arr = [obj1, obj2, obj3];
â¦â¦ä½æ¯ç¨æ°ç»æä¸ªé®é¢ãâå é¤å
ç´ âåâæå
¥å
ç´ âçæä½ä»£ä»·é常大ãä¾å¦ï¼arr.unshift(obj) æä½å¿
须对ææå
ç´ éæ°ç¼å·ä»¥ä¾¿ä¸ºæ°çå
ç´ obj è
¾åºç©ºé´ï¼èä¸å¦ææ°ç»å¾å¤§ï¼ä¼å¾èæ¶ãarr.shift() åçã
å¯ä¸å¯¹æ°ç»ç»æåä¿®æ¹èä¸éè¦å¤§ééæçæä½å°±æ¯å¯¹æ°ç»æ«ç«¯çæä½ï¼arr.push/popãå æ¤ï¼å¯¹äºå¤§éåæ¥è¯´ï¼å½æä»¬å¿
须对æ°ç»é¦ç«¯çå
ç´ è¿è¡æä½æ¶ï¼æ°ç»ä¼å¾æ
¢ãï¼è¯æ³¨ï¼æ¤å¤çé¦ç«¯æä½å
¶å®æçæ¯å¨å°¾ç«¯ä»¥å¤çæ°ç»å
çå
ç´ è¿è¡æå
¥/å 餿ä½ãï¼
妿æä»¬ç¡®å®éè¦å¿«éæå ¥/å é¤ï¼åå¯ä»¥éæ©å¦ä¸ç§å«å é¾è¡¨ çæ°æ®ç»æã
é¾è¡¨å ç´ æ¯ä¸ä¸ªä½¿ç¨ä»¥ä¸å ç´ éè¿éå½å®ä¹ç对象ï¼
valueãnext屿§å¼ç¨ä¸ä¸ä¸ª é¾è¡¨å ç´ æè 代表æ«å°¾çnullã
ä¾å¦ï¼
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
é¾è¡¨çå¾å½¢è¡¨ç¤ºï¼
䏿®µç¨æ¥å建é¾è¡¨ç代ç ï¼
let list = { value: 1 };
list.next = { value: 2 };
list.next.next = { value: 3 };
list.next.next.next = { value: 4 };
list.next.next.next.next = null;
å¨è¿å¿æä»¬å¯ä»¥æ¸
æ¥å°çå°ï¼è¿éæå¾å¤ä¸ªå¯¹è±¡ï¼æ¯ä¸ä¸ªé½æ value åæåé»å±
ç nextãåé list æ¯é¾æ¡ä¸ç第ä¸ä¸ªå¯¹è±¡ï¼å æ¤é¡ºç next æéï¼æä»¬å¯ä»¥æµè¾¾ä»»ä½å
ç´ ã
该é¾è¡¨å¯ä»¥å¾å®¹æè¢«æå为å¤ä¸ªé¨åï¼ç¶ååéæ°ç»è£ åå»ï¼
let secondList = list.next.next;
list.next.next = null;
åå¹¶ï¼
list.next.next = secondList;
å½ç¶ï¼æä»¬å¯ä»¥å¨ä»»ä½ä½ç½®æå ¥æç§»é¤å ç´ ã
æ¯å¦ï¼è¦æ·»å ä¸ä¸ªæ°å¼ï¼æä»¬éè¦æ´æ°é¾è¡¨ç头ï¼
let list = { value: 1 };
list.next = { value: 2 };
list.next.next = { value: 3 };
list.next.next.next = { value: 4 };
// å°æ°å¼æ·»å å°é¾è¡¨å¤´é¨
list = { value: "new item", next: list };
è¦ä»ä¸é´å é¤ä¸ä¸ªå¼ï¼å¯ä»¥ä¿®æ¹åä¸ä¸ªå
ç´ ç nextï¼
list.next = list.next.next;
æä»¬è®© list.next ä» 1 è·³å°å¼ 2ãç°å¨å¼ 1 就被ä»é¾è¡¨ä¸ç§»é¤äºã妿宿²¡æè¢«åå¨å¨å
¶å®ä»»ä½å°æ¹ï¼é£ä¹å®ä¼è¢«èªå¨ä»å
åä¸å é¤ã
䏿°ç»ä¸åï¼é¾è¡¨æ²¡æå¤§è§æ¨¡éæï¼æä»¬å¯ä»¥å¾å®¹æå°éæ°æåå ç´ ã
å½ç¶ï¼é¾è¡¨ä¹ä¸æ»æ¯ä¼äºæ°ç»çãä¸ç¶å¤§å®¶å°±é½å»ä½¿ç¨é¾è¡¨äºã
é¾è¡¨ä¸»è¦ç缺ç¹å°±æ¯æä»¬æ æ³å¾å®¹æå°éè¿å
ç´ çç¼å·è·åå
ç´ ãä½å¨æ°ç»ä¸å´å¾å®¹æï¼arr[n] æ¯ä¸ä¸ªç´æ¥å¼ç¨ãèå¨é¾è¡¨ä¸ï¼æä»¬éè¦ä»èµ·ç¹å
ç´ å¼å§ï¼é¡ºç next æ¾ N 次æè½è·åå°ç¬¬ N 个å
ç´ ã
â¦â¦ä½æ¯æä»¬ä¹å¹¶ä¸æ¯æ»éè¦è¿æ ·çæä½ãæ¯å¦ï¼å½æä»¬éè¦ä¸ä¸ªéåçè³ä¸ä¸ª ååéå ââ æåºç»æå¿ é¡»å¯ä»¥å¿«éå°ä»ä¸¤ç«¯æ·»å /ç§»é¤å ç´ ï¼æ é访é®ä¸é´å ç´ ã
é¾è¡¨å¯ä»¥å¾å°å¢å¼ºï¼
- æä»¬å¯ä»¥å¨
nextä¹å¤ï¼åæ·»åprev屿§æ¥å¼ç¨åä¸ä¸ªå ç´ ï¼ä»¥ä¾¿è½»æ¾å°å¾åç§»å¨ã - æä»¬è¿å¯ä»¥æ·»å ä¸ä¸ªå为
tailçåéï¼è¯¥åéå¼ç¨é¾è¡¨çæåä¸ä¸ªå ç´ ï¼å¹¶å¨ä»æ«å°¾æ·»å /å é¤å ç´ æ¶å¯¹è¯¥å¼ç¨è¿è¡æ´æ°ï¼ã - â¦â¦æ°æ®ç»æå¯è½ä¼æ ¹æ®æä»¬çéæ±èååã
æ»ç»
æ¯è¯ï¼
-
éå½ æ¯ç¼ç¨çä¸ä¸ªæ¯è¯ï¼è¡¨ç¤ºä»èªèº«è°ç¨å½æ°ï¼è¯æ³¨ï¼ä¹å°±æ¯èªè°ç¨ï¼ãéå½å½æ°å¯ç¨äºä»¥æ´ä¼é çæ¹å¼è§£å³é®é¢ã
å½ä¸ä¸ªå½æ°è°ç¨èªèº«æ¶ï¼æä»¬ç§°å ¶ä¸º é彿¥éª¤ãéå½ç åºç¡ æ¯å½æ°åæ°ä½¿ä»»å¡ç®åå°è¯¥å½æ°ä¸åéè¦è¿è¡è¿ä¸æ¥è°ç¨ã
-
éå½å®ä¹ çæ°æ®ç»ææ¯æå¯ä»¥ä½¿ç¨èªèº«æ¥å®ä¹çæ°æ®ç»æã
ä¾å¦ï¼é¾è¡¨å¯ä»¥è¢«å®ä¹ä¸ºç±å¯¹è±¡å¼ç¨ä¸ä¸ªåè¡¨ï¼æ
nullï¼èç»æçæ°æ®ç»æãlist = { value, next -> list }å HTML å ç´ æ æè æ¬ç« ä¸ç
departmentæ çï¼æ¬è´¨ä¸ä¹æ¯éå½ï¼å®ä»¬æåæ¯ï¼èä¸åæ¯åå¯ä»¥æå ¶ä»åæ¯ãå°±åæä»¬å¨ç¤ºä¾
sumSalaryä¸çå°ç飿 ·ï¼å¯ä»¥ä½¿ç¨éå½å½æ°æ¥éåå®ä»¬ã
ä»»ä½éå½å½æ°é½å¯ä»¥è¢«éå为è¿ä»£ï¼è¯æ³¨ï¼ä¹å°±æ¯å¾ªç¯ï¼å½¢å¼ãææ¶è¿æ¯å¨ä¼åä»£ç æ¶éè¦åçãä½å¯¹äºå¤§å¤æ°ä»»å¡æ¥è¯´ï¼é彿¹æ³è¶³å¤å¿«ï¼å¹¶ä¸å®¹æç¼ååç»´æ¤ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼