我想为lodash differenceBy编写我自己的迭代器,它给我不同的大于5的数组值。
根据文档。iteratee用于“生成比较它们的标准”。
根据文档提供的示例:
_.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], Math.floor); // [5, 6]这与使用Math.floor()类似。
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]但是当我尝试这个的时候
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
你能给我一个例子,如何为这种情况编写一个迭代器吗?
谢谢。
发布于 2018-04-25 00:57:54
differenceBy将通过该函数运行每个值,然后如果返回值是唯一的,则保留该值。您的iter_greater只返回true或false,这两者都不会只出现一次,因此它(理所应当)返回一个空数组。
你可以这样做,这在大多数情况下都是有效的:
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); // []<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>
但您会遇到以下问题:
let iter_greater = (value) => {
return value > 5 ? value : undefined;
};
let differenceBy = _.differenceBy([1, 2, 3, 5, 6], [], iter_greater);
console.log(differenceBy); // []<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>
您可能想要做的就是将_.difference和.filter链接在一起
let differenceBy = _.difference([1, 2, 3, 5, 6], [1, 2, 3, 8, 10]).filter(x => x > 5);
console.log(differenceBy); // []<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>
发布于 2018-04-25 15:04:42
通过使用带比较的函数,可以创建具有布尔值的两个数组。
这
_.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], iter_greater);分两个步骤工作:
iter_greater1、2、3、5、6 -> false、true -> false、true、true
false,true first array false,true,true第二个数组false存在于第二个数组true存在于第二个数组//没有值,第二个数组包含true和false
发布于 2018-04-25 00:56:06
使用这个
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]https://stackoverflow.com/questions/50006811
复制相似问题