Javascript 通过迭代了解lodash差异:大于x的不同数组值

Javascript 通过迭代了解lodash差异:大于x的不同数组值,javascript,arrays,lodash,Javascript,Arrays,Lodash,我想为lodash differenceBy编写我自己的迭代器,它给我的数组值大于5 根据文件。iteratee用于“生成比较它们的标准” 根据文档的示例: _.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], Math.floor); // [5, 6] 这与使用Math.floor()类似 但是当我尝试这个的时候 let iter_greater = (value) => { return value > 5; }; le

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

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

根据文档的示例:

_.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], Math.floor); // [5, 6]
这与使用Math.floor()类似

但是当我尝试这个的时候

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的源代码如下:

你能给我一个例子,如何为这个案例编写一个迭代器吗

谢谢。

用这个

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]

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

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

让iter\u更大=(值)=>{
返回值>5?值:未定义;
};
设差分比=u.差分比([1,2,3,5,6],[1,2,3,8,10],iter\u更大);
console.log(differenceBy);//[]

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

这个

工作分两步进行:

  • 映射所有值并使用iteratee函数

  • 通过检查值是否存在于第二个数组中来筛选映射的第一个数组


  • 我还不清楚你想要的结果是什么。你能明确地列出它吗?我猜您只想
    [6]
    ?是的,在示例中,结果应该是[6]关于lodash差异的出色解释
    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]
    
    _.differenceBy([1, 2, 3, 5, 6], [1, 2, 3, 8, 10], iter_greater);
    
    [1,  2,  3,  5,  6]  ->  [false, false, false, false,  true]
    [1,  2,  3,  8, 10]  ->  [false, false, false,  true,  true]
    
    [false, false, false, false,  true]  first array
    [false, false, false,  true,  true]  second array
     false                               exists in 2nd array
            false                        exists in 2nd array
                   false                 exists in 2nd array
                          false          exists in 2nd array
                                  true   exists in 2nd array
    
    [                                 ] // no values, 2nd array contains true and false