首頁 >web前端 >前端問答 >es6 filter()怎麼用

es6 filter()怎麼用

青灯夜游
青灯夜游原創
2022-10-11 17:29:374585瀏覽

在es6中,filter()是一個陣列過濾方法,會呼叫一個回呼函數來過濾陣列中的元素,傳回符合條件的所有元素,語法「Array.filter(callback(element[, index [, array]])[, thisArg])」。 filter()方法會建立一個新數組,新數組中的元素是透過檢查指定數組中符合條件的所有元素。

es6 filter()怎麼用

本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

陣列過濾器方法是 JavaScript 中使用最廣泛的方法之一。

它允許我們快速過濾出具有特定條件的陣列中的元素。

因此,在本文中,您將了解有關過濾器方法及其各種用例的所有內容。

所以讓我們開始吧。


看看下面沒有使用篩選器方法的程式碼:

const employees = [
  { name: 'David Carlson', age: 30 },
  { name: 'John Cena', age: 34 },
  { name: 'Mike Sheridan', age: 25 },
  { name: 'John Carte', age: 50 }
];
 
const filtered = [];
 
for(let i = 0; i  -1) {
   filtered.push(employees[i]);
 }
}
 
console.log(filtered); // [ { name: "John Cena", age: 34 }, { name: "John Carte", age: 50 }]

es6 filter()怎麼用

#在上面的程式碼中,我們正在尋找具有John 我們正在使用indexOf方法的名稱的所有員工。

for 循環程式碼看起來很複雜,因為我們需要手動循環employees陣列並將匹配的員工推送到filtered陣列中。

但是使用陣列過濾方法,我們可以簡化上面的程式碼。

陣列過濾方法filter()

filter() 方法建立一個新的數組,新數組中的元素是透過檢查指定數組中符合條件的所有元素。

陣列過濾方法的語法如下:

Array.filter(callback(element[, index[, array]])[, thisArg])

filter 方法不會更改原始數組,但會傳回一個新數組,其中包含滿足提供的測試條件的所有元素。

filter 方法將回呼函數作為第一個參數,並為陣列的每個元素執行回呼函數。

在回呼函數的每次迭代中,每個陣列元素值都作為第一個參數傳遞給回呼函數。

使用過濾器方法查看以下程式碼:

const employees = [
  { name: 'David Carlson', age: 30 },
  { name: 'John Cena', age: 34 },
  { name: 'Mike Sheridan', age: 25 },
  { name: 'John Carte', age: 50 }
];
 
const filtered = employees.filter(function (employee) {
  return employee.name.indexOf('John') > -1;
});
 
console.log(filtered); // [ { name: "John Cena", age: 34 }, { name: "John Carte", age: 50 }]

es6 filter()怎麼用

#在這裡,使用陣列過濾方法,我們不需要手動循環遍歷employees數組,也不需要filtered事先建立數組來過濾掉匹配的員工。

了解過濾方法filter()

filter 方法接受一個回呼函數,陣列的每個元素在循環的每次迭代中都會作為第一個參數自動傳遞。

假設我們有以下數字數組:

const numbers = [10, 40, 30, 25, 50, 70];

而我們想要找出所有大於30的元素,那麼我們可以使用如下所示的過濾方法:

const numbers = [10, 40, 30, 25, 50, 70];

const filtered = numbers.filter(function(number) {
  return number > 30;
});

console.log(filtered); // [40, 50, 70]

es6 filter()怎麼用

所以在回呼函數內部,在循環的第一次迭代中,數組中的第一個元素值10 將作為number參數值傳遞,並且10 > 30 為false,因此數字10 不會被視為匹配項。

陣列過濾方法傳回一個數組,因此 10 不大於 30,它不會被加入到filtered陣列列表中。

然後在循環的下一個迭代中,數組中的下一個元素40 將作為number參數值傳遞給回調函數,當40 > 30 為真時,將被視為匹配並添加到filtered大批。

這將持續到陣列中的所有元素都沒有完成循環。

因此,只要回呼函數傳回一個false值,該元素就不會被加入到過濾後的陣列中。 filter 方法傳回一個數組,該數組僅包含回呼函數為其傳回true值的那些元素。

您可以看到在循環的每次迭代中傳遞給回呼函數的元素的當前值如果將值記錄到控制台:

const numbers = [10, 40, 30, 25, 50, 70];
 
const filtered = numbers.filter(function(number) {
  console.log(number, number > 30);
  return number > 30;
});
 
console.log(filtered); // [40, 50, 70]
 
/* output
10 false
40 true
30 false
25 false
50 true
70 true
[40, 50, 70]
*/

es6 filter()怎麼用

#現在,看看下面的程式碼:

const checkedState = [true, false, false, true, true];
 
const onlyTrueValues = checkedState.filter(function(value) {
  return value === true;
});
 
console.log(onlyTrueValues); // [true, true, true]

es6 filter()怎麼用

在上面的程式碼中,我們只找出那些值為true.

回调函数可以如上所示编写,也可以使用箭头函数如下所示:

const onlyTrueValues = checkedState.filter(value => {
  return value === true;
});

而如果箭头函数中只有一条语句,我们可以跳过return关键字,隐式返回值,如下:

const onlyTrueValues = checkedState.filter(value => value === true);

上面的代码可以进一步简化为:

const onlyTrueValues = checkedState.filter(Boolean);

要了解它是如何工作的,请查看我的这篇文章。

回调函数参数

除了数组的实际元素外,传递给 filter 方法的回调函数还接收以下参数:

  • 我们正在循环的index数组中当前元素的
  • array我们循环播放的原版

看看下面的代码:

const checkedState = [true, false, false, true, true];

checkedState.filter(function(value, index, array) {
  console.log(value, index, array);
  return value === true;
});

/* output

true   0  [true, false, false, true, true]
false  1  [true, false, false, true, true]
false  2  [true, false, false, true, true]
true   3  [true, false, false, true, true]
true   4  [true, false, false, true, true]

*/

es6 filter()怎麼用

过滤方法的用例

正如您在上面看到的,数组过滤器方法对于过滤掉数组中的数据很有用。

但是过滤器方法在一些实际用例中也很有用,例如从数组中删除重复项,分离两个数组之间的公共元素等。

从数组中删除元素

filter 方法最常见的用例是从数组中删除特定元素。

const users = [
  {name: 'David', age: 35},
  {name: 'Mike', age: 30},
  {name: 'John', age: 28},
  {name: 'Tim', age: 48}
];

const userToRemove = 'John';

const updatedUsers = users.filter(user => user.name !== userToRemove);

console.log(updatedUsers);

/* output

[
  {name: 'David', age: 35},
  {name: 'Mike', age: 30},
  {name: 'Tim', age: 48}
]

*/

es6 filter()怎麼用

在这里,我们从users名称为 的数组中删除用户John

userToRemove因此,在回调函数中,我们正在检查保留名称与存储在变量中的名称不匹配的用户的条件。

从数组中查找唯一或重复项

const numbers = [10, 20, 10, 30, 10, 30, 50, 70];

const unique = numbers.filter((value, index, array) => {
  return array.indexOf(value) === index;
})

console.log(unique); // [10, 20, 30, 50, 70]

const duplicates = numbers.filter((value, index, array) => {
  return array.indexOf(value) !== index;
})

console.log(duplicates); // [10, 10, 30]

es6 filter()怎麼用

indexOf方法返回第一个匹配元素的索引,因此,在上面的代码中,我们正在检查我们正在循环的元素的当前索引是否与第一个匹配元素的索引匹配,以找出唯一和重复元素.

查找两个数组之间的不同值

const products1 = ["books","shoes","t-shirt","mobile","jackets"];

const products2 = ["t-shirt", "mobile"];

const filteredProducts = products1.filter(product => products2.indexOf(product) === -1);

console.log(filteredProducts); // ["books", "shoes", "jackets"]

es6 filter()怎麼用

在这里,我们products1使用 filter 方法循环,在回调函数中,我们正在检查products2数组是否包含我们使用 arrayindexOf方法循环的当前元素。

如果该元素不匹配,则条件为真,该元素将被添加到filteredProducts数组中。

您还可以使用数组includes方法来实现相同的功能:

const products1 = ["books","shoes","t-shirt","mobile","jackets"];

const products2 = ["t-shirt", "mobile"];

const filteredProducts = products1.filter(product => !products2.includes(product));

console.log(filteredProducts); // ["books", "shoes", "jackets"]

es6 filter()怎麼用

浏览器对过滤方法的支持

  • 所有现代浏览器和 Internet Explorer (IE) 版本 9 及更高版本
  • Microsoft Edge 版本 12 及更高版本

【相关推荐:web前端开发

以上是es6 filter()怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn