gpt4 book ai didi

javascript - 需要一些关于如何在 JavaScript 中使用函数式编程来重用函数的想法

转载 作者:行者123 更新时间:2023-11-28 14:28:51 25 4
gpt4 key购买 nike

这是我的jsfiddle:https://jsfiddle.net/kpam8g79/9/

我有一个函数 findCommon:

function findCommon(ar1, ar2, ar3)
{
// Initialize starting indexes for ar1[], ar2[] and ar3[]
let i = 0, j = 0, k = 0;

// Iterate through three arrays while all arrays have elements
while (i < ar1.length && j < ar2.length && k < ar3.length)
{
// If x = y and y = z, print any of them and move ahead
// in all arrays
if (ar1[i] == ar2[j] && ar2[j] == ar3[k])
{ console.log(ar1[i]+" "); i++; j++; k++; }

// x < y
else if (ar1[i] < ar2[j])
i++;

// y < z
else if (ar2[j] < ar3[k])
j++;

// We reach here when x > y and z < y, i.e., z is smallest
else
k++;
}
}

我的数据集如下所示:

const ar1 = [1, 2, 3, 6, 8];

但是当我的数据集是对象数组时

const oAr1 = ar1.map(v => ({value: v, display: `value ${v}`}));

我仍然想获得共同的值(value)观。

我可以将 oAr1 映射到 ar1 并调用 findCommon 函数,但这可能性能不佳。我还可以修改 findCommon 函数以接受对象数组而不是数字数组,但我想重用 findCommon。我想知道是否可以使用函数式编程以某种方式组合两个函数,以便我可以重用 findCommon。

我想知道如何做到这一点......

最佳答案

您可以向 findCommon 添加一个可选参数,默认为 x => x

这允许您传递一个函数,该函数描述查找要比较的值所需的逻辑。

const ar1 = [1, 2, 3, 6, 8];
const ar2 = [1, 5, 6, 9];
const ar3 = [1, 4, 5, 6];

const oAr1 = ar1.map(v => ({value: v, display: `value ${v}`}));
const oAr2 = ar2.map(v => ({value: v, display: `value ${v}`}));
const oAr3 = ar3.map(v => ({value: v, display: `value ${v}`}));

findCommon(ar1, ar2, ar3);
findCommon(oAr1, oAr2, oAr3, o => o.value);

function findCommon(ar1, ar2, ar3, getValue = x => x)
{
// Initialize starting indexes for ar1[], ar2[] and ar3[]
let i = 0, j = 0, k = 0;

// Iterate through three arrays while all arrays have elements
while (i < ar1.length && j < ar2.length && k < ar3.length)
{
var x1 = getValue(ar1[i]);
var x2 = getValue(ar2[j]);
var x3 = getValue(ar3[k]);

// If x = y and y = z, print any of them and move ahead
// in all arrays
if (x1 === x2 && x2 === x3)
{ console.log(x1, ar1[i]); i++; j++; k++; }

// x < y
else if (x1 < x2)
i++;

// y < z
else if (x2 < x3)
j++;

// We reach here when x > y and z < y, i.e., z is smallest
else
k++;
}
}

关于javascript - 需要一些关于如何在 JavaScript 中使用函数式编程来重用函数的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52269254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com