Array.prototype.filter()
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
filter() 㯠Array ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ãæå®ãããé
åã®ä¸ããæå®ããã颿°ã§å®è£
ããã¦ãããã¹ãã«åæ ¼ããè¦ç´ ã ããæ½åºããã·ã£ãã¼ã³ãã¼ã使ãã¾ãã
試ãã¦ã¿ã¾ããã
const words = ["spray", "elite", "exuberant", "destruction", "present"];
const result = words.filter((word) => word.length > 6);
console.log(result);
// äºæ³ãããçµæ: Array ["exuberant", "destruction", "present"]
æ§æ
filter(callbackFn)
filter(callbackFn, thisArg)
弿°
callbackFn-
é åã®ããããã®è¦ç´ ã«å¯¾ãã¦å®è¡ãã颿°ã§ãããã®é¢æ°ã¯ãé åã®è¦ç´ ãä¿æããå ´åã¯çå¤ãä¿æããªãå ´åã¯å½å¤ãè¿ãã¾ãããã®é¢æ°ã¯ä»¥ä¸ã®å¼æ°ã§å¼ã³åºããã¾ãã
thisArgçç¥å¯-
callbackFnãå®è¡ããéã«thisã¨ãã¦ä½¿ç¨ãããå¤ãå復å¦çã¡ã½ãããåç §ãã¦ãã ããã
è¿å¤
æå®ãããé åã®ä¸é¨ããæå®ããã颿°ã§å®è£ ããããã¹ãã«åæ ¼ããè¦ç´ ã ãã«çµãè¾¼ãã§ã·ã£ãã¼ã³ãã¼ãããã®ã§ãããã¹ãã«åæ ¼ããè¦ç´ ããªãå ´åã¯ã空ã®é åãè¿ããã¾ãã
解説
filter() ã¡ã½ããã¯å復å¦çã¡ã½ããã§ããæå®ããã callbackFn 颿°ãé
åã®åè¦ç´ ã«å¯¾ãã¦ä¸åº¦ãã¤å¼ã³åºãã callbackFn ãçå¤ãè¿ãããã¹ã¦ã®è¦ç´ ãããªãæ°ããé
åãçæãã¾ãã callbackFn ãã¹ãã«åæ ¼ããªãã£ãé
åè¦ç´ ã¯ãæ°ããé
åã«ã¯å«ã¾ãã¾ããããããã®ã¡ã½ãããä¸è¬çã«ã©ã®ããã«åä½ããã®ãã«ã¤ãã¦ã®è©³ç´°ã¯ãå復å¦çã¡ã½ããã®ç¯ãã覧ãã ããã
callbackFn ã¯å¤ãå²ãå½ã¦ããã¦ããé
åã¤ã³ããã¯ã¹ã«å¯¾ãã¦ã®ã¿å¼ã³åºããã¾ããçé
åã®ç©ºã®ã¹ãããã«å¯¾ãã¦ã¯å¼ã³åºããã¾ããã
filter() ã¡ã½ããã¯æ±ç¨çã§ãããã®ã¡ã½ãã㯠this ã®å¤ã« length ããããã£ã¨æ´æ°ã®ãã¼ãæã£ãããããã£ããããã¨ã ããæ±ãã¾ãã
ä¾
>å°ããå¤ããã¹ã¦åãé¤ã
次ã®ä¾ã§ã¯ãfilter() ã使ã£ã¦ 10 æªæºã®å¤ãæã¤è¦ç´ ããã¹ã¦åãé¤ããé
åãçæãã¾ãã
function isBigEnough(value) {
return value >= 10;
}
const filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
é åå ã®ç´ æ°ããã¹ã¦æ¤ç´¢ãã
以ä¸ã®ä¾ã¯é åå ã®ãã¹ã¦ã®ç´ æ°ãè¿ãã¾ãã
const array = [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
function isPrime(n) {
if (n < 2) {
return false;
}
if (n % 2 === 0) {
return n === 2;
}
for (let factor = 3; factor * factor <= n; factor += 2) {
if (n % factor === 0) {
return false;
}
}
return true;
}
console.log(array.filter(isPrime)); // [2, 3, 5, 7, 11, 13]
ã¡ã¢:
isPrime() ã®å®è£
ã¯ã説æã®ã¿ãç®çã¨ãã¦ãã¾ããå®éã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãç¹°ãè¿ãè¨ç®ãé¿ããããã«ãã¨ã©ãã¹ããã¹ã®ç¯©ãªã©ã®ãé«åº¦ã«æé©åãããã¢ã«ã´ãªãºã ã使ç¨ãããã¨ããå§ããã¾ãã
JSON ã®ä¸æ£ãªå 容ãåãé¤ã
次ã®ä¾ã§ã¯ãfilter() ã使ã£ã¦ id ã®æ°å¤ã 0 以å¤ã®è¦ç´ ã ãã«çµã£ã JSON ãçæãã¾ãã
const arr = [
{ id: 15 },
{ id: -1 },
{ id: 0 },
{ id: 3 },
{ id: 12.2 },
{},
{ id: null },
{ id: NaN },
{ id: "undefined" },
];
let invalidEntries = 0;
function filterByID(item) {
if (Number.isFinite(item.id) && item.id !== 0) {
return true;
}
invalidEntries++;
return false;
}
const arrByID = arr.filter(filterByID);
console.log("çµãè¾¼ã¿ãããé
å\n", arrByID);
// çµãè¾¼ã¿ãããé
å
// [{ id: 15 }, { id: -1 }, { id: 3 }, { id: 12.2 }]
console.log("ç¡å¹ãªé
ç®ã®æ° =", invalidEntries);
// ç¡å¹ãªé
ç®ã®æ° = 5
é åå ã®æ¤ç´¢
次ã®ä¾ã§ã¯ filter() ã使ã£ã¦æ¤ç´¢æ¡ä»¶ã§é
åã®çµãè¾¼ã¿ããã¦ãã¾ãã
const fruits = ["apple", "banana", "grapes", "mango", "orange"];
/**
* æ¤ç´¢æ¡ä»¶ï¼ã¯ã¨ãªã¼ï¼ã«åºã¥ãã¦é
åã®ã¢ã¤ãã ããã£ã«ã¿ã¼ãã
*/
function filterItems(arr, query) {
return arr.filter((el) => el.toLowerCase().includes(query.toLowerCase()));
}
console.log(filterItems(fruits, "ap")); // ['apple', 'grapes']
console.log(filterItems(fruits, "an")); // ['banana', 'mango', 'orange']
callbackFn ã®ç¬¬ 3 弿°ã®ä½¿ç¨
array 弿°ã¯ãé
åã®å¥ã®è¦ç´ ã«ã¢ã¯ã»ã¹ãããå ´åãç¹ã«ããã®é
åãåç
§ããæ¢åã®å¤æ°ããªãå ´åã«ä¾¿å©ã§ããæ¬¡ã®ä¾ã§ã¯ãã¾ã map() ã使ç¨ãã¦ããããã®ååããæ°å¤ ID ãæ½åºããæ¬¡ã« filter() ã使ç¨ãã¦ããã®æ°å¤ãé£ã®æ°å¤ããã大ãããã®ã鏿ãã¦ãã¾ãã
const names = ["JC63", "Bob132", "Ursula89", "Ben96"];
const greatIDs = names
.map((name) => parseInt(name.match(/\d+/)[0], 10))
.filter((id, idx, arr) => {
// arr 弿°ããªãå ´åã夿°ã«ä¿åããã«ä¸éé
åã«
// ç°¡åã«ã¢ã¯ã»ã¹ããæ¹æ³ã¯ããã¾ããã
if (idx > 0 && id <= arr[idx - 1]) return false;
if (idx < arr.length - 1 && id <= arr[idx + 1]) return false;
return true;
});
console.log(greatIDs); // [132, 96]
array 弿°ã¯ãæ§ç¯ä¸ã®é
åã§ã¯ããã¾ãããã³ã¼ã«ããã¯é¢æ°ããæ§ç¯ä¸ã®é
åã«ã¢ã¯ã»ã¹ããæ¹æ³ã¯ããã¾ããã
çé åã«å¯¾ãã filter() ã®ä½¿ç¨
filter() ã¯ç©ºã®ã¹ããããã¹ããããã¾ãã
console.log([1, , undefined].filter((x) => x === undefined)); // [undefined]
console.log([1, , undefined].filter((x) => x !== 2)); // [1, undefined]
é åã§ãªããªãã¸ã§ã¯ãã«å¯¾ãã filter() ã®å¼ã³åºã
filter() ã¡ã½ãã㯠this ã® length ããããã£ãèªã¿åãã length æªæºã®éè² ã®æ´æ°ã®ãã¼ãæã¤ãã¹ã¦ã®ããããã£ã«ã¢ã¯ã»ã¹ãã¾ãã
const arrayLike = {
length: 3,
0: "a",
1: "b",
2: "c",
3: "a", // length ã 3 ã§ãããã filter() ã¯ç¡è¦ãã
};
console.log(Array.prototype.filter.call(arrayLike, (x) => x <= "b"));
// [ 'a', 'b' ]
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-array.prototype.filter > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
Array.prototype.filterã®ããªãã£ã« (core-js)- es-shims ã«ãã
Array.prototype.filterã®ããªãã£ã« - ã¤ã³ããã¯ã¹ä»ãã³ã¬ã¯ã·ã§ã³ã¬ã¤ã
ArrayArray.prototype.forEach()Array.prototype.every()Array.prototype.map()Array.prototype.some()Array.prototype.reduce()TypedArray.prototype.filter()