Baseline Widely available
findIndex()
æ¹æ³å°ä¾ææä¾ç測試å½å¼ï¼å°æ¾é£åä¸ç¬¦åçå
ç´ ï¼ä¸¦è¿åå
¶ indexï¼ç´¢å¼ï¼ãå¦ææ²æç¬¦åçå°è±¡ï¼å°è¿å -1 ã
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber));
// Expected output: 3
å¦è«åè¦ find()
æ¹æ³ï¼å®è¿åé£å䏿¾å°çå
ç´ çå¼ï¼è䏿¯å
¶ç´¢å¼ã
arr.findIndex(callback[, thisArg])忏
callback
éå°é£åä¸çæ¯åå ç´ ï¼é½æå·è¡è©²åå¼å½å¼ï¼å·è¡ææèªåå³å ¥ä¸é¢ä¸å忏ï¼
element
ç¶åå ç´ ã
index
鏿æ§
ç¶åå ç´ çç´¢å¼ã
array
鏿æ§
å¼å« findIndex
çé£åã
thisArg
鏿æ§
å¯é¸çãå·è¡ callback æä½çº this å°è±¡çå¼ã
An index in the array if an element passes the test; otherwise, -1.
æè¿°findIndex
æ¹æ³å°é£åä¸çæ¯ä¸åç´¢å¼ï¼0..length-1
ï¼å«ï¼çå
ç´ å·è¡ä¸æ¬¡ callback
ç´å°æä¸å callback
è¿å truthy å¼ï¼ä¸åå¯å¼·å¶è½åï¼coercesï¼çº true
çå¼ï¼ã妿æ¾å°äºä¸å鿍£çå
ç´ ï¼å findIndex
å°æç«å»è¿åæ¤æ¬¡è¿ä»£çç´¢å¼ãè¥åå¼å½å¼å¾æªåå³ä¸å truthy å¼ï¼æé£åç length
çº 0ï¼å findIndex
å°æè¿å -1ãä¸åå
¶ä»çé£åæ¹æ³å¦ some
飿¨£ï¼æ¼ç¨çï¼sparseï¼é£åä¸ callback
ä»æè¢«å¼å«ï¼å³ä½¿è©²ç´¢å¼çé
ç®å¨é£åä¸ä¸¦ä¸åå¨ã
callback
被å¼å«ææå³å
¥ä¸å忏ï¼å
ç´ çå¼ãå
ç´ çç´¢å¼ï¼ä»¥å被è¿ä»£çé£åç©ä»¶ã
妿ä¸å thisArg
åæ¸è¢«æä¾çµ¦ findIndex
ï¼å®å°æè¢«ç¶ä½ this
使ç¨å¨æ¯æ¬¡åå¼å½å¼è¢«èª¿ç¨çæåãå¦ææ²æè¢«æä¾ï¼å°æä½¿ç¨ undefined
ã
findIndex
ä¸æä¿®æ¹å¼å«æ¤æ¹æ³çé£åã
å¨ç¬¬ä¸æ¬¡å¼å« callback
å½å¼ææç¢ºå®å
ç´ çç´¢å¼ç¯åï¼å æ¤å¨ findIndex
æ¹æ³éå§å·è¡ä¹å¾æ·»å å°é£åçæ°å
ç´ å°ä¸æè¢« callback
å½å¼è¨ªåå°ã妿é£åä¸ä¸åå°æªè¢« callback
å½å¼è¨ªåå°çå
ç´ çå¼è¢« callback
å½å¼ææ¹è®ï¼é£éº¼ç¶ callback
å½å¼è¨ªåå°å®æï¼å®ç弿¯å°æ¯æ ¹æå®å¨é£åä¸çç´¢å¼æè¨ªåå°çç¶åå¼ï¼è¢«åªé¤çå
ç´ ä»ç¶æè¢«è¨ªåå°ã
以ä¸çç¯ä¾æ¼ç¤ºäºå¦ä½æ¥æ¾ä¸åé£åä¸é¦å質æ¸å ç´ çç´¢å¼ï¼æ¾ä¸å°åè¿å -1ã
function isPrime(element, index, array) {
var start = 2;
while (start <= Math.sqrt(element)) {
if (element % start++ < 1) {
return false;
}
}
return element > 1;
}
console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 12].findIndex(isPrime)); // 2
使ç¨ç®é å½å¼å°æ¾ç´¢å¼
以ä¸ç¯ä¾çºä½¿ç¨ç®é å½å¼å°æ¾æ°´æçç´¢å¼ã
const fruits = ["apple", "banana", "cantaloupe", "blueberries", "grapefruit"];
const index = fruits.findIndex((fruit) => fruit === "blueberries");
console.log(index); // 3
console.log(fruits[index]); // blueberries
Polyfill
// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
if (!Array.prototype.findIndex) {
Object.defineProperty(Array.prototype, "findIndex", {
value: function (predicate) {
// 1. Let O be ? ToObject(this value).
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
if (typeof predicate !== "function") {
throw new TypeError("predicate must be a function");
}
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
var thisArg = arguments[1];
// 5. Let k be 0.
var k = 0;
// 6. Repeat, while k < len
while (k < len) {
// a. Let Pk be ! ToString(k).
// b. Let kValue be ? Get(O, Pk).
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
// d. If testResult is true, return k.
var kValue = o[k];
if (predicate.call(thisArg, kValue, k, o)) {
return k;
}
// e. Increase k by 1.
k++;
}
// 7. Return -1.
return -1;
},
});
}
å¦æä½ éè¦ç¸å®¹éæç䏿¯æ´ Object.defineProperty
ç JavaScript å¼æï¼æå¥½ä¸è¦ä½¿ç¨ polyfill ä¾å¡«å
Array.prototype
æ¹æ³ï¼å çºç¡æ³ä½¿å®åæçºä¸å¯æèçï¼non-enumerableï¼å±¬æ§ã
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