### 1. 凑集操作
#### `_.each`
类似于 JavaScript 的 `Array.prototype.forEach`,用于遍历凑集。

```javascript
_.each([1, 2, 3], function(num) {
console.log(num);
});
// 输出: 1, 2, 3
```
#### `_.map`
用于对凑集中的每个元素进行操作并返回一个新的数组。
```javascript
const doubled = _.map([1, 2, 3], function(num) {
return num 2;
});
console.log(doubled); // 输出: [2, 4, 6]
```
### 2. 数组操作
#### `_.filter`
用于过滤凑集中的元素。
```javascript
const evens = _.filter([1, 2, 3, 4, 5, 6], function(num) {
return num % 2 === 0;
});
console.log(evens); // 输出: [2, 4, 6]
```
#### `_.reduce`
用于将凑集中的元素归约为单个值。
```javascript
const sum = _.reduce([1, 2, 3], function(memo, num) {
return memo + num;
}, 0);
console.log(sum); // 输出: 6
```
### 3. 工具操作
#### `_.keys`
返回工具的所有键。
```javascript
const obj = {one: 1, two: 2, three: 3};
console.log(_.keys(obj)); // 输出: ['one', 'two', 'three']
```
#### `_.values`
返回工具的所有值。
```javascript
console.log(_.values(obj)); // 输出: [1, 2, 3]
```
### 4. 函数操作
#### `_.bind`
创建一个新的函数,将 `this` 关键字绑定到指定的工具。
```javascript
const greet = function(greeting) {
return greeting + ': ' + this.name;
};
const obj = {name: 'Alice'};
const boundGreet = _.bind(greet, obj);
console.log(boundGreet('Hello')); // 输出: 'Hello: Alice'
```
### 5. 工具函数
#### `_.range`
创建一个包含一系列数字的数组。
```javascript
console.log(_.range(5)); // 输出: [0, 1, 2, 3, 4]
console.log(_.range(1, 5)); // 输出: [1, 2, 3, 4]
```
### 6. 链式操作
可以通过 `_()` 方法进行链式调用。
```javascript
const result = _([1, 2, 3, 4])
.chain()
.filter(function(num) { return num % 2 == 0; })
.map(function(num) { return num num; })
.value();
console.log(result); // 输出: [4, 16]
```
### 小结
Underscore.js 供应了丰富的函数式编程工具,使得对凑集、数组和工具的操作变得更加简洁和高效。它的设计理念是供应简洁、优雅的 API,来帮助开拓者快速实现繁芜的数据处理逻辑。
我的文章可能还有不敷之处,如有不同见地,请留言谈论。