---
tags: JAVASCRIPT
---
# [筆記] 陣列處理方法 Array
[教學筆記](https://wcc723.github.io/javascript/2017/06/29/es6-native-array/)
- filter()
- find()
- forEach()
- map()
- every()
- some()
- reduce()
### filter
- 回傳array
- 搜尋符合條件的資料
### find
- 回傳找到符合條件的第一個值
### forEach
- 不會回傳值
- 如同 for
### map
- 回傳值的數量等於array長度
- 適用於將原始變數運算後再重組合成一個新的陣列
### every
- 回傳一個值,true或false
- 檢查陣列中所有值是否符合特定條件
### some
- 回傳一個值,true或false
- 檢查陣列中是否符合特定條件的值
### reduce
- [MDN說明](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)
### join
- array 合成字串
### unshift
- 從前面插入值
### shift
- 從前面"刪值"
### splice
- 從Array中添加/刪除項目,回傳被刪除的項目。
- array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
- [slice()、splice()、split() 傻傻分不清 - Peggy Chan - Medium](https://medium.com/@bebebobohaha/slice-splice-split-%E5%82%BB%E5%82%BB%E5%88%86%E4%B8%8D%E6%B8%85-46d9c8992729)
### split
- 分割字串成字串組
- stringObject.split(separator,how_many): 可控制傳回最大長度
### slice
- 複製開始與結束點(結束點不算)中的內容
- arr.slice(begin, end)
### concat
- 用來合併兩個或多個陣列
- 回傳新的array
## 應用
```javascript
// 相同的陣列
var people = [{
name: 'Casper',
like: '鍋燒意麵',
age: 18
},
{
name: 'Wang',
like: '炒麵',
age: 24
},
{
name: 'Bobo',
like: '蘿蔔泥',
age: 1
},
{
name: '滷蛋',
like: '蘿蔔泥',
age: 3
}
];
console.log(people)
// 回傳array,搜尋符合條件的資料
var filterAgeThan5 = people.filter(function (item, index, array) {
return item.age > 5
});
console.log(filterAgeThan5)
// 雖有2個,但只回傳第一個
var findAgeThan10 = people.find(function (item, index, array) {
return item.age > 10
});
console.log(findAgeThan10)
// 不會額外回傳值,只單純執行每個陣列內的物件或值
// 如同for
var findEveryName = people.forEach(function (item, index, array) {
console.log(item.name);
});
// 使用 map() 時他需要回傳一個值,他會透過函式內所回傳的值組合成一個陣列。
// 回傳數量等於原始陣列的長度
// 這很適合將原始的變數運算後重新組合一個新的陣列。
var mapEat = people.map(function (item, index, array) {
if (item.like !== '蘿蔔泥') {
return `${item.like} 好吃`;
} else {
return `${item.like} 不好吃`;
}
});
console.log(mapEat);
// 僅會回傳一個值 true or false
// 檢查陣列中的內容是否符合特定條件
var ans = people.every(function (item, index, array) {
console.log(item, index, array); // 物件, 索引, 全部陣列
return item.age > 10 // 當全部 age 大於 10 才能回傳 true
});
console.log(ans); // false: 只要有部分不符合,則為 false
var ans2 = people.every(function (item, index, array) {
return item.age < 25
});
console.log(ans2); // true: 全部 age 都小於 25
// some和every的差別是,some只要部分符合即可
// reduce
const average = function() {
const nums = Array.from(arguments);
const total = nums.reduce(function(acc, val) {
return acc + val
}, 0)
console.log('total', total)
return total/nums.length
}
console.log('average', average(1, 2, 3, 4, 5))
```
# Array的方法
## Array.from()
Array.from() 方法會從類陣列(array-like)或是可迭代(iterable)物件建立一個新的 Array 實體。
```javascript
console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]
var m = new Map([[1, 2], [2, 4], [4, 8]]);
console.log(m);
console.log(Array.from(m));
// [[1, 2], [2, 4], [4, 8]]
function f() {
return Array.from(arguments);
}
f(1, 2, 3);
// [1, 2, 3]
```