---
# System prepended metadata

title: '[學習筆記] Array 的 filter, find, some, every'

---

# [學習筆記] Array 的 filter, find, some, every


### 將 filter/find 歸類在一類，因為他們都是回傳符合條件的元素

* filter：會回傳一個陣列，裡面有**所有符合**資格的元素，若沒有符合的值，則會回傳空陣列。
* find：會回傳**第一個符合**條件的值，若沒有符合的值，則是傳回 undefined。

### 將 some/every 歸類在一類，因為他們都是回傳布林值

* some：陣列中**至少有一個元素滿足**回呼函式的條件，就會返回 true，如果全部元素都不符合條件，則回傳 false。
* every：如果此陣列中的**每個元素都滿足**回呼函式給的條件，則回傳 true，如果有任何一個不符合條件，則回傳 false。

---
參考來源:
[JavaScript 常用陣列方法彙整](https://medium.com/%E9%A6%AC%E6%A0%BC%E8%95%BE%E7%89%B9%E7%9A%84%E5%86%92%E9%9A%AA%E8%80%85%E6%97%A5%E8%AA%8C/cheet-sheet-for-array-methods-9ef9c6a5f59f)
[JavaScript 的 filter() / find() / some() / every()](https://tina126hung.medium.com/javascript-filter-find-some-every-324da1ab844a)

Array.pototype.filter
丟進去 true, false 回傳符合條件的新陣列

Array.pototype.some
測試數組中是不是至少有1個元素通過了被提供的函數測試。
回傳布林值。

Array.pototype.find
傳回數組中滿足提供的測試函數的第一個元素的值。
否則返回 undefined。


---

假設我現在有兩個陣列
A = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
B = ['B','E','G']

我想找出 A 陣列裡面有符合 B 的元素
然後最後結果我要拿有符合 B 陣列值的新 A 陣列

所以我要用 A 陣列去 filter 出新陣列
再用 B 陣列去比對有符合 A 值有哪些

```javascript!
const resultArr = A.filter((Aitem) => {
    B.some((Bitem) => Bitem.id === Aitem.id)
})
```

如果不用 filter 和 some 也可以，但就是用 forEach

```javascript!
const resultArray = []

A.forEach((Aitem) => {
  B.forEach((Bitem) => {
    if (Bitem.id === Aitem.id) {
      resultArray.push(Aitem);
    }
  });
});
```
