首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >了解lodash differenceBy迭代器:大于x的不同数组值

了解lodash differenceBy迭代器:大于x的不同数组值
EN

Stack Overflow用户
提问于 2018-04-25 00:35:54
回答 3查看 3.4K关注 0票数 1

我想为lodash differenceBy编写我自己的迭代器,它给我不同的大于5的数组值。

根据文档。iteratee用于“生成比较它们的标准”。

根据文档提供的示例:

代码语言:javascript
运行
复制
_.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], Math.floor); // [5, 6]

这与使用Math.floor()类似。

代码语言:javascript
运行
复制
let iter_floor = (value) => {
    return Math.floor(value);
};

let differenceBy = _.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], iter_floor);
console.log(differenceBy); // [5, 6]

但是当我尝试这个的时候

代码语言:javascript
运行
复制
let iter_greater = (value) => {
    return value > 5;
};

let differenceBy = _.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], iter_greater);
console.log(differenceBy); // []

我得到一个空数组。我希望获得大于5的不同数组值

lodash differenceBy的源代码在这里:https://github.com/lodash/lodash/blob/4.17.5/lodash.js#L6971

你能给我一个例子,如何为这种情况编写一个迭代器吗?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-04-25 00:57:54

differenceBy将通过该函数运行每个值,然后如果返回值是唯一的,则保留该值。您的iter_greater只返回true或false,这两者都不会只出现一次,因此它(理所应当)返回一个空数组。

你可以这样做,这在大多数情况下都是有效的:

代码语言:javascript
运行
复制
let iter_greater = (value) => {
    return value > 5 ? value : undefined;
};

let differenceBy = _.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], iter_greater);
console.log(differenceBy); // []
代码语言:javascript
运行
复制
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>

但您会遇到以下问题:

代码语言:javascript
运行
复制
let iter_greater = (value) => {
    return value > 5 ? value : undefined;
};

let differenceBy = _.differenceBy([1, 2, 3, 5, 6], [], iter_greater);
console.log(differenceBy); // []
代码语言:javascript
运行
复制
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>

您可能想要做的就是将_.difference.filter链接在一起

代码语言:javascript
运行
复制
let differenceBy = _.difference([1, 2, 3, 5, 6], [1, 2, 3, 8, 10]).filter(x => x > 5);
console.log(differenceBy); // []
代码语言:javascript
运行
复制
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>

票数 2
EN

Stack Overflow用户

发布于 2018-04-25 15:04:42

通过使用带比较的函数,可以创建具有布尔值的两个数组。

代码语言:javascript
运行
复制
_.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], iter_greater);

分两个步骤工作:

  1. 映射所有值并使用迭代器函数iter_greater

1、2、3、5、6 -> false、true -> false、true、true

  1. 通过检查映射的第一个数组中是否存在该值来过滤第二个数组。

false,true first array false,true,true第二个数组false存在于第二个数组true存在于第二个数组//没有值,第二个数组包含true和false

票数 1
EN

Stack Overflow用户

发布于 2018-04-25 00:56:06

使用这个

代码语言:javascript
运行
复制
let iter_floor = (value) => {
 return value > 5 && Math.floor(value);
};

let differenceBy = _.differenceBy([1, 2, 3, 5, 6,7,8,9], [1, 2, 3, 8, 10], iter_floor);
console.log(differenceBy); // [6, 7, 9]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50006811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档