我有以下代码:
function sort() {
let array1 = [{ value:1 }, { value:2 }, { value:3 }];
let array2 = [{ code:1 }, { code:2 }, { code:3 }];
const constructSortedArray = pipe(
sortBy(array1, element => element.value),
sortedArray1 => sortedArray1.concat(array2)
);
return constructSortedArray();
}
我使用lodash/fp/flow
作为管道别名和lodash/sortBy
。在运行代码时,该功能可以正常工作,但在开玩笑地测试代码时,我在pipe
上收到以下错误:
TypeError: Expected a function
> 73 | const constructSortedArray = pipe(
我尝试将testEnviornment
设置为jsdom
和node
,但这没有帮助。 automock
也出于玩笑而被禁用。
感谢您的帮助。
答案 0 :(得分:1)
调用sortBy
时,它返回结果,而不是函数。您可以通过使用箭头函数并以array1
作为参数调用管道函数来进行修复。
注意:lodash没有_.pipe()
方法(它名为_.flow()
),但是lodash / fp有(这是_.flow()
的别名)。
const { flow, sortBy } = _;
function sort() {
let array1 = [{ value:1 }, { value:2 }, { value:3 }];
let array2 = [{ code:1 }, { code:2 }, { code:3 }];
const constructSortedArray = flow(
arr => sortBy(arr, element => element.value),
sortedArray1 => sortedArray1.concat(array2)
);
return constructSortedArray(array1);
}
console.log(sort());
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
更干净的选择是让用户_.partialRight()
返回一个已经应用了最正确参数的函数:
const { flow, partialRight, sortBy, concat } = _;
function sort() {
let array1 = [{ value:1 }, { value:2 }, { value:3 }];
let array2 = [{ code:1 }, { code:2 }, { code:3 }];
const constructSortedArray = flow(
partialRight(sortBy, element => element.value),
partialRight(concat, array2)
);
return constructSortedArray(array1);
}
console.log(sort());
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
最干净的方法是使用lodash / fp用户,因为所有函数都是自动运行的,并且参数的顺序正确:
const { pipe, partialRight, sortBy, concat } = _;
function sort() {
let array1 = [{ value:1 }, { value:2 }, { value:3 }];
let array2 = [{ code:1 }, { code:2 }, { code:3 }];
const constructSortedArray = pipe(
sortBy(element => element.value),
partialRight(concat, [array2])
);
return constructSortedArray(array1);
}
console.log(sort());
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>