Baseline Widely available
forEach()
æ¹æ³å¯¹æ°ç»çæ¯ä¸ªå
ç´ æ§è¡ä¸æ¬¡ç»å®ç彿°ã
const array1 = ["a", "b", "c"];
array1.forEach((element) => console.log(element));
// Expected output: "a"
// Expected output: "b"
// Expected output: "c"
è¯æ³
forEach(callbackFn)
forEach(callbackFn, thisArg)
åæ°
callbackFn
为æ°ç»ä¸æ¯ä¸ªå ç´ æ§è¡ç彿°ãå¹¶ä¼ä¸¢å¼å®çè¿åå¼ãè¯¥å½æ°è¢«è°ç¨æ¶å°ä¼ å ¥ä»¥ä¸åæ°ï¼
element
æ°ç»ä¸æ£å¨å¤ççå½åå ç´ ã
index
æ°ç»ä¸æ£å¨å¤ççå½åå ç´ çç´¢å¼ã
array
è°ç¨äº forEach()
çæ°ç»æ¬èº«ã
thisArg
å¯é
æ§è¡ callbackFn
æ¶ç¨ä½ this
çå¼ãåè§è¿ä»£æ¹æ³ã
undefined
ã
forEach()
æ¹æ³æ¯ä¸ä¸ªè¿ä»£æ¹æ³ãå®æç´¢å¼ååºå°ä¸ºæ°ç»ä¸çæ¯ä¸ªå
ç´ è°ç¨ä¸æ¬¡æä¾ç callbackFn
彿°ãä¸ map()
ä¸åï¼forEach()
æ»æ¯è¿å undefined
ï¼èä¸ä¸è½ç»§ç»é¾å¼è°ç¨ãå
¶å
¸åçç¨æ³æ¯å¨é¾å¼è°ç¨çæ«å°¾æ§è¡æäºæä½ã
callbackFn
ä»
对已èµå¼çæ°ç»ç´¢å¼è°ç¨ã对äºç¨çæ°ç»ä¸ç空槽ï¼å®ä¸ä¼è¢«è°ç¨ã
forEach()
ä¸ä¼æ¹åå
¶è°ç¨çæ°ç»ï¼ä½æ¯ï¼ä½ä¸º callbackFn
ç彿°å¯ä»¥æ´æ¹æ°ç»ã请注æï¼å¨ç¬¬ä¸æ¬¡è°ç¨ callbackFn
ä¹åï¼æ°ç»çé¿åº¦å·²ç»è¢«ä¿åãå æ¤ï¼
forEach()
æ¶ï¼callbackFn
ä¸ä¼è®¿é®è¶
åºæ°ç»åå§é¿åº¦çä»»ä½å
ç´ ãcallbackFn
忬¡è°ç¨å®ä»¬ãcallbackFn
æ´æ¹äºæ°ç»ä¸å·²ç»åå¨ä½å°æªè®¿é®çå
ç´ ï¼åä¼ éç» callbackFn
çå¼å°æ¯å¨è®¿é®è¯¥å
ç´ æ¶çå¼ãå·²ç»è¢«å é¤çå
ç´ ä¸ä¼è¢«è®¿é®ãè¦åï¼ ä¸è¿°ç±»åçå¹¶åä¿®æ¹ç»å¸¸å¯¼è´é¾ä»¥çè§£ç代ç ï¼é常åºé¿å ï¼ç¹æ®æ åµé¤å¤ï¼ã
forEach()
æ¹æ³æ¯éç¨çãå®åªææ this
å¼å
·æ length
屿§åæ´æ°é®ç屿§ã
é¤éæåºå¼å¸¸ï¼å¦å没æåæ³åæ¢æä¸æ forEach()
循ç¯ã妿æè¿æ ·çéæ±ï¼åä¸åºè¯¥ä½¿ç¨ forEach()
æ¹æ³ã
å¯ä»¥éè¿å for
ãfor...of
å for...in
è¿æ ·ç循ç¯è¯å¥æ¥å®ç°æåç»æ¢ãå½ä¸éè¦è¿ä¸æ¥è¿ä»£æ¶ï¼è¯¸å¦ every()
ãsome()
ãfind()
å findIndex()
çæ°ç»æ¹æ³ä¹ä¼ç«å³åæ¢è¿ä»£ã
forEach()
ææçæ¯ä¸ä¸ªåæ¥å½æ°ï¼å®ä¸ä¼çå¾
Promise å
ç°ãå¨ä½¿ç¨ Promiseï¼æå¼æ¥å½æ°ï¼ä½ä¸º forEach
åè°æ¶ï¼è¯·ç¡®ä¿ä½ æè¯å°è¿ä¸ç¹å¯è½å¸¦æ¥çå½±åã
const ratings = [5, 4, 5];
let sum = 0;
const sumFunction = async (a, b) => a + b;
ratings.forEach(async (rating) => {
sum = await sumFunction(sum, rating);
});
console.log(sum);
// ææçè¾åºï¼14
// å®é
çè¾åºï¼0
妿叿æé¡ºåºçæè å¹¶åçæ§è¡ä¸ç³»åæä½ï¼å¯ä»¥æ¥ç promise ç»åã
ç¤ºä¾ å¨ç¨çæ°ç»ä¸ä½¿ç¨ forEach()const arraySparse = [1, 3, /* empty */, 7];
let numCallbackRuns = 0;
arraySparse.forEach((element) => {
console.log({ element });
numCallbackRuns++;
});
console.log({ numCallbackRuns });
// { element: 1 }
// { element: 3 }
// { element: 7 }
// { numCallbackRuns: 3 }
å¦ä½ æè§ï¼ä¸ä¼ä¸ºç´¢å¼ 2 å¤ç缺失å¼è°ç¨åè°å½æ°ã
å° for 循ç¯è½¬æ¢ä¸º forEachconst items = ["item1", "item2", "item3"];
const copyItems = [];
// before
for (let i = 0; i < items.length; i++) {
copyItems.push(items[i]);
}
// after
items.forEach((item) => {
copyItems.push(item);
});
æå°åºæ°ç»çå
容
夿³¨ï¼ 为äºå¨æ§å¶å°ä¸æ¾ç¤ºæ°ç»çå
容ï¼ä½ å¯ä»¥ä½¿ç¨ console.table()
æ¥å±ç¤ºç»è¿æ ¼å¼åçæ°ç»ãä¸é¢çä¾å忝å¦ä¸ç§ä½¿ç¨ forEach()
çæ ¼å¼åçæ¹æ³ã
ä¸é¢ç代ç ä¼ä¸ºæ¯ä¸ä¸ªæ°ç»å ç´ è¾åºä¸è¡è®°å½ï¼
const logArrayElements = (element, index /*, array */) => {
console.log(`a[${index}] = ${element}`);
};
// 注æï¼ç´¢å¼ 2 被跳è¿ï¼å 为æ°ç»ä¸è¿ä¸ªä½ç½®æ²¡æå
容
[2, 5, , 9].forEach(logArrayElements);
// logs:
// a[0] = 2
// a[1] = 5
// a[3] = 9
ä½¿ç¨ thisArg
举个å强çä¾åï¼æç §æ¯ä¸ªæ°ç»ä¸çå ç´ å¼ï¼æ´æ°ä¸ä¸ªå¯¹è±¡ç屿§ï¼
class Counter {
constructor() {
this.sum = 0;
this.count = 0;
}
add(array) {
// åªæå½æ°è¡¨è¾¾å¼ææèªå·±ç this ç»å®
array.forEach(function countEntry(entry) {
this.sum += entry;
++this.count;
}, this);
}
}
const obj = new Counter();
obj.add([2, 5, 9]);
console.log(obj.count); // 3
console.log(obj.sum); // 16
å 为 thisArg
åæ°ï¼this
ï¼ä¼ ç»äº forEach()
ï¼æ¯æ¬¡è°ç¨æ¶ï¼å®é½è¢«ä¼ ç» callbackFn
彿°ï¼ä½ä¸ºå®ç this
å¼ã
夿³¨ï¼ å¦æä½¿ç¨ç®å¤´å½æ°è¡¨è¾¾å¼æ¥ä¼ å
¥å½æ°åæ°ï¼ thisArg
åæ°ä¼è¢«å¿½ç¥ï¼å 为ç®å¤´å½æ°å¨è¯æ³ä¸ç»å®äº this
å¼ã
ä¸é¢ç代ç ä¼å建ä¸ä¸ªç»å®å¯¹è±¡ç坿¬ãå建对象ç坿¬æä¸åçæ¹æ³ï¼ä»¥ä¸æ¯åªæ¯ä¸ç§æ¹æ³ï¼å¹¶è§£éäº Array.prototype.forEach()
æ¯å¦ä½ä½¿ç¨ Object.*
å®ç¨å·¥å
·å½æ°ã
const copy = (obj) => {
const copy = Object.create(Object.getPrototypeOf(obj));
const propNames = Object.getOwnPropertyNames(obj);
propNames.forEach((name) => {
const desc = Object.getOwnPropertyDescriptor(obj, name);
Object.defineProperty(copy, name, desc);
});
return copy;
};
const obj1 = { a: 1, b: 2 };
const obj2 = copy(obj1); // ç°å¨ obj2 çèµ·æ¥å obj1 䏿¨¡ä¸æ ·äº
å¨è¿ä»£æé´ä¿®æ¹æ°ç»
ä¸é¢çä¾åä¼è¾åº one
, two
, four
ã
å½å°è¾¾å
å«å¼ two
ç项æ¶ï¼æ´ä¸ªæ°ç»ç第ä¸ä¸ªé¡¹è¢«ç§»é¤äºï¼è¿å¯¼è´ææå©ä¸ç项ä¸ç§»ä¸ä¸ªä½ç½®ãå 为å
ç´ four
æ£ä½äºå¨æ°ç»æ´åçä½ç½®ï¼æä»¥ three
ä¼è¢«è·³è¿ã
forEach()
ä¸ä¼å¨è¿ä»£ä¹åå建æ°ç»ç坿¬ã
const words = ["one", "two", "three", "four"];
words.forEach((word) => {
console.log(word);
if (word === "two") {
words.shift(); //'one' å°ä»æ°ç»ä¸å é¤
}
}); // one // two // four
console.log(words); // ['two', 'three', 'four']
æå¹³åæ°ç»
ä¸é¢ç示ä¾ä»
ç¨äºå¦ä¹ ç®çãå¦æä½ æ³ä½¿ç¨å
ç½®æ¹æ³æ¥æå¹³åæ°ç»ï¼ä½ å¯ä»¥èèä½¿ç¨ Array.prototype.flat()
ã
const flatten = (arr) => {
const result = [];
arr.forEach((item) => {
if (Array.isArray(item)) {
result.push(...flatten(item));
} else {
result.push(item);
}
});
return result;
};
// ç¨ä¾
const nested = [1, 2, 3, [4, 5, [6, 7], 8, 9]];
console.log(flatten(nested)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
å¨éæ°ç»å¯¹è±¡ä¸è°ç¨ forEach()
forEach()
æ¹æ³è¯»å this
ç length
屿§ï¼ç¶åè®¿é®æ¯ä¸ªæ´æ°ç´¢å¼ã
const arrayLike = {
length: 3,
0: 2,
1: 3,
2: 4,
};
Array.prototype.forEach.call(arrayLike, (x) => console.log(x));
// 2
// 3
// 4
è§è æµè§å¨å
¼å®¹æ§ åè§
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