Baseline Widely available
ÐеÑод filter()
ÑоздаÑÑ Ð½Ð¾Ð²Ñй маÑÑив Ñо вÑеми ÑлеменÑами, пÑоÑедÑими пÑовеÑкÑ, задаваемÑÑ Ð² пеÑедаваемой ÑÑнкÑии.
const words = ["spray", "elite", "exuberant", "destruction", "present"];
const result = words.filter((word) => word.length > 6);
console.log(result);
// Expected output: Array ["exuberant", "destruction", "present"]
СинÑакÑиÑ
// СÑÑелоÑÐ½Ð°Ñ ÑÑнкÑиÑ
filter((element) => { ... } )
filter((element, index) => { ... } )
filter((element, index, array) => { ... } )
// ÐолбÑк-ÑÑнкÑиÑ
filter(callbackFn)
filter(callbackFn, thisArg)
// ÐÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð»Ð±Ñк-ÑÑнкÑиÑ
filter(function callbackFn(element) { ... })
filter(function callbackFn(element, index) { ... })
filter(function callbackFn(element, index, array){ ... })
filter(function callbackFn(element, index, array) { ... }, thisArg)
ÐаÑамеÑÑÑ
callbackFn
ФÑнкÑиÑ-пÑедикаÑ, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²Ñзвана Ð´Ð»Ñ Ð¿ÑовеÑки каждого ÑлеменÑа маÑÑива. ÐÑли ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ true
, Ñо ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¾ÑÑаÑÑÑÑ Ð² маÑÑиве, еÑли false
, Ñо ÑдалÑеÑÑÑ.
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑи аÑгÑменÑа
element
ТекÑÑий обÑабаÑÑваемÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² маÑÑиве.
index
ÐеобÑзаÑелÑнÑй
ÐÐ½Ð´ÐµÐºÑ ÑекÑÑего обÑабаÑÑваемого ÑлеменÑа в маÑÑиве.
array
ÐеобÑзаÑелÑнÑй
ÐбÑабаÑÑваемÑй маÑÑив, на коÑоÑом бÑл вÑзван меÑод filter()
.
thisArg
ÐеобÑзаÑелÑнÑй
ÐнаÑение, иÑполÑзÑемое в каÑеÑÑве this
пÑи вÑзове колбÑк-ÑÑнкÑии callbackFn
.
ÐеÑнÑÑÑÑ Ð½Ð¾Ð²Ñй маÑÑив Ñ ÑлеменÑами, коÑоÑÑе пÑоÑли пÑовеÑкÑ. ÐÑли ни один ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð½Ðµ пÑоÑÑл пÑовеÑкÑ, Ñо бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑÑн пÑÑÑой маÑÑив.
ÐпиÑаниеÐеÑод filter()
вÑзÑÐ²Ð°ÐµÑ Ð¿ÐµÑеданнÑÑ ÑÑнкÑÐ¸Ñ callback
один Ñаз Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа, пÑиÑÑÑÑÑвÑÑÑего в маÑÑиве, и ÑоздаÑÑ Ð½Ð¾Ð²Ñй маÑÑив Ñо вÑеми знаÑениÑми, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
ÑÑнкÑÐ¸Ñ callback
веÑнÑла знаÑение, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ñиведено к true
. ФÑнкÑÐ¸Ñ callback
вÑзÑваеÑÑÑ ÑолÑко Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов маÑÑива Ñ Ñже опÑеделÑннÑми знаÑениÑми; она не вÑзÑваеÑÑÑ Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов, коÑоÑÑе бÑли ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð¸Ð»Ð¸ коÑоÑÑм знаÑÐµÐ½Ð¸Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не пÑиÑваивалиÑÑ. ÐлеменÑÑ Ð¼Ð°ÑÑива, не пÑоÑедÑие пÑовеÑÐºÑ ÑÑнкÑией callback
, пÑоÑÑо пÑопÑÑкаÑÑÑÑ Ð¸ не вклÑÑаÑÑÑÑ Ð² новÑй маÑÑив.
ФÑнкÑÐ¸Ñ callback
вÑзÑваеÑÑÑ Ñ ÑÑÐµÐ¼Ñ Ð°ÑгÑменÑами:
ÐÑли в меÑод filter()
бÑл пеÑедан паÑамеÑÑ thisArg
, пÑи вÑзове callback
он бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² каÑеÑÑве знаÑÐµÐ½Ð¸Ñ this
. РпÑоÑивном ÑлÑÑае в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ this
бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð·Ð½Ð°Ñение undefined
. РконеÑном иÑоге, знаÑение this
, наблÑдаемое из ÑÑнкÑии callback
, опÑеделÑеÑÑÑ ÑоглаÑно обÑÑнÑм пÑавилам опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ this
.
ÐеÑод filter()
не изменÑÐµÑ Ð¼Ð°ÑÑив, Ð´Ð»Ñ ÐºÐ¾ÑоÑого он бÑл вÑзван.
ÐлеменÑÑ Ð¼Ð°ÑÑива, обÑабаÑÑваемÑе меÑодом filter()
, ÑÑÑанавливаеÑÑÑ Ð´Ð¾ пеÑвого вÑзова ÑÑнкÑии callback
. ÐлеменÑÑ, добавленнÑе в маÑÑив поÑле наÑала вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÑода filter()
, либо изменÑннÑе в пÑоÑеÑÑе вÑполнениÑ, не бÑдÑÑ Ð¾Ð±ÑабоÑÐ°Ð½Ñ ÑÑнкÑией callback
. СооÑвеÑÑÑвÑÑÑим обÑазом, еÑли ÑÑÑеÑÑвÑÑÑие ÑлеменÑÑ ÑдалÑÑÑÑÑ Ð¸Ð· маÑÑива, они Ñакже не бÑдÑÑ Ð¾Ð±ÑабоÑанÑ
ÐÑедÑпÑеждение: одновÑеменное изменение ÑлеменÑов, опиÑанное в пÑедÑдÑÑем паÑагÑаÑе, ÑаÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑÑÑÐ´Ð½Ð¾Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÐ¼Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ, поÑÑÐ¾Ð¼Ñ Ð½Ðµ ÑекомендÑеÑÑÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑо (за иÑклÑÑением оÑобÑÑ ÑлÑÑаев).
ÐÑимеÑÑ Ð¤Ð¸Ð»ÑÑÑаÑÐ¸Ñ Ð²ÑÐµÑ Ð¼Ð°Ð»ÐµÐ½ÑÐºÐ¸Ñ Ð·Ð½Ð°ÑенийСледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзÑÐµÑ filter()
Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾ÑÑилÑÑÑованного маÑÑива, вÑе ÑлеменÑÑ ÐºÐ¾ÑоÑого болÑÑе или ÑÐ°Ð²Ð½Ñ 10, а вÑе менÑÑие 10 ÑдаленÑ.
function isBigEnough(value) {
return value >= 10;
}
let filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// маÑÑив filtered ÑепеÑÑ ÑодеÑÐ¶Ð¸Ñ [12, 130, 44]
ÐайÑи вÑе пÑоÑÑÑе ÑиÑла в маÑÑиве
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð²Ñе пÑоÑÑÑе ÑиÑла в маÑÑиве:
const array = [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
function isPrime(num) {
for (let i = 2; num > i; i++) {
if (num % i == 0) {
return false;
}
}
return num > 1;
}
console.log(array.filter(isPrime)); // [2, 3, 5, 7, 11, 13]
ФилÑÑÑаÑÐ¸Ñ Ð½ÐµÐ²ÐµÑнÑÑ
запиÑей в JSON
Ð ÑледÑÑÑем пÑимеÑе меÑод filter()
иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾ÑÑилÑÑÑованного JSON-обÑекÑа, вÑе ÑлеменÑÑ ÐºÐ¾ÑоÑого ÑодеÑÐ¶Ð°Ñ Ð½ÐµÐ½Ñлевое ÑиÑловое поле id
.
let 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;
}
let arrByID = arr.filter(filterByID);
console.log("ÐÑÑилÑÑÑованнÑй маÑÑив\n", arrByID);
// ÐÑÑилÑÑÑованнÑй маÑÑив
// [{ id: 15 }, { id: -1 }, { id: 3 }, { id: 12.2 }]
console.log("ÐолиÑеÑÑво некоÑÑекÑнÑÑ
ÑлеменÑов = ", invalidEntries);
// ÐолиÑеÑÑво некоÑÑекÑнÑÑ
ÑлеменÑов = 5
ÐоиÑк в маÑÑиве
Ð ÑледÑÑÑем пÑимеÑе filter()
иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑилÑÑÑаÑии ÑодеÑжимого маÑÑива на оÑнове вÑ
однÑÑ
даннÑÑ
.
var fruits = ["apple", "banana", "grapes", "mango", "orange"];
/**
* ÐлеменÑÑ Ð¼Ð°ÑÑива ÑилÑÑÑÑеÑÑÑ Ð½Ð° оÑнове кÑиÑеÑиев поиÑка (query)
*/
function filterItems(query) {
return fruits.filter(function (el) {
return el.toLowerCase().indexOf(query.toLowerCase()) > -1;
});
}
console.log(filterItems("ap")); // ['apple', 'grapes']
console.log(filterItems("an")); // ['banana', 'mango', 'orange']
РеализаÑÐ¸Ñ Ñ Ð¸ÑполÑзованием ES2015
const fruits = ["apple", "banana", "grapes", "mango", "orange"];
/**
* ÐлеменÑÑ Ð¼Ð°ÑÑива ÑилÑÑÑÑеÑÑÑ Ð½Ð° оÑнове кÑиÑеÑиев поиÑка (query)
*/
const filterItems = (arr, query) => {
return arr.filter(
(el) => el.toLowerCase().indexOf(query.toLowerCase()) !== -1,
);
};
console.log(filterItems(fruits, "ap")); // ['apple', 'grapes']
console.log(filterItems(fruits, "an")); // ['banana', 'mango', 'orange']
ÐодиÑикаÑÐ¸Ñ Ð¸Ð·Ð½Ð°ÑалÑного маÑÑива (изменение, добавление и Ñдаление)
Ð ÑледÑÑÑиÑ
пÑимеÑаÑ
пÑовеÑÑеÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ меÑода filter
пÑи изменении маÑÑива.
// Ðзменение вÑеÑ
ÑлеменÑов
let words = ["spray", "limit", "exuberant", "destruction", "elite", "present"];
const modifiedWords = words.filter((word, index, arr) => {
arr[index + 1] += " extra";
return word.length < 6;
});
console.log(modifiedWords);
// ÐбÑаÑиÑе внимание, ÑÑо еÑÑÑ ÑÑи Ñлова длиной менее 6, но Ñак как они бÑли измененÑ,
// возвÑаÑаеÑÑÑ Ð¾Ð´Ð½Ð¾ Ñлово ['spray']
// Ðобавление новÑÑ
ÑлеменÑов
words = ["spray", "limit", "exuberant", "destruction", "elite", "present"];
const appendedWords = words.filter((word, index, arr) => {
arr.push("new");
return word.length < 6;
});
console.log(appendedWords);
// ТолÑко ÑÑи Ñлова ÑдовлеÑвоÑÑÑÑ ÑÑловиÑ, Ñ
оÑÑ `words` ÑепеÑÑ Ð¸Ð¼ÐµÐµÑ ÐºÑда болÑÑе Ñлов,
// длинной менÑÑе 6 Ñимволов: ['spray', 'limit', 'elite']
// Удаление ÑлеменÑов
words = ["spray", "limit", "exuberant", "destruction", "elite", "present"];
const deleteWords = words.filter((word, index, arr) => {
arr.pop();
return word.length < 6;
});
console.log(deleteWords);
// ÐамеÑÑÑе, ÑÑо 'elite' не полÑÑено, Ñак как Ñдалено из `words` до Ñого,
// как filter Ñмог полÑÑиÑÑ ÐµÐ³Ð¾: ['spray', 'limit']
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
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