> For the complete documentation index, see [llms.txt](https://lodash.shujuwajue.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lodash.shujuwajue.com/array/differenceby.md).

# \_.differenceBy（过滤值）

**语法：**

```javascript
_.differenceBy(array, [values], [iteratee=_.identity])
```

**源代码链接：**[source](https://github.com/lodash/lodash/blob/4.17.10/lodash.js#L6979)

**npm包链接：**[npm package](https://www.npmjs.com/package/lodash.differenceby)

**描述：**

与\_.difference相比，它多接收一个iteratee参数。暂且称之为迭代器。array和values的元素值都需要先进行iteratee的参数的方法进行处理后再进行比较。结果值由第一个数组决定。

> 注意: 不同于 [\_.pullAllBy](https://lodash.com/docs/4.17.10#pullAllBy), \_.differenceBy这个方法返回一个新数组。

**开始版本：**&#x34;.0.0

**参数：**

* `array (Array)`: 需要检查的数组。
* `[values] (...Array):` 需要排除的值。&#x20;
* `[iteratee=_.identity] (Function):` 迭代元素时调用的方法。

**返回值：**

* `array (Array)`: 返回过滤有的新数组。

**例子：**

```javascript
_.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
// => [1.2]

// The `_.property` iteratee shorthand.
_.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
// => [{ 'x': 2 }]
```

> 解析１：[`Math.floor()`返回小于或等于一个给定数字的最大整数。](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/floor)
>
> ```javascript
> _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
> // => [1.2]
> ```
>
> 思路过程一：迭代(Math.floor)元素后结果：`[2.1, 1.2]=> [２, １],[2.3, 3.4]=> [2, 3])`
>
> 思路过程二：进行\_.difference(\[2, 1], \[2, 3]) 过滤值。 ＝》 剩下１
>
> 思路过程三：将1.2push到一个新的数组返回
>
> 解析２：
>
> ```javascript
> // The `_.property` iteratee shorthand
> _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
> // => [{ 'x': 2 }]
> ```
>
> 注释的意思x的迭代方法，其实是`_.property(ｘ)`的简写，获取迭代元素对象x的值
>
> 根据解析１的思路就一目了然的，明白了，其实是过滤{ 'x': 1 }的元素。

## 资料：

[每天一个lodash方法-differenceBy](https://segmentfault.com/a/1190000014263177)
