3 回答

TA貢獻1780條經(jīng)驗 獲得超1個贊
對于逐元素重復(fù),只需讓數(shù)組函數(shù)調(diào)用標(biāo)量函數(shù):
function myFunctionArr(coords1, coords2) {
const results = [];
for (let i = 0; i < coords1.length; i++) {
results[i] = myFunctionScalar(coords1[i], coords2[i]);
}
return results;
}
function myFunctionScalar(coord1, coord2) {
const myVar1 = coord1 * coord2;
const myVar2 = myVar1 / coord2 + myVar1;
return coord1 * (coord2 / myVar2);
}
當(dāng)然你也可以把它變成一個重載函數(shù),比如
function myFunction(coord1, coord2) {
if (Array.isArray(coord1)) { // args are arrays
return myFunctionArr(coord1, coord2);
} else { // args are scalar
return myFunctionScalar(coord1, coord2);
}
}
您甚至可以在輔助函數(shù)(也由許多具有功能的庫提供)中的多個數(shù)組元素上抽象函數(shù)的元素應(yīng)用:
return zipWith(myFunctionScalar, coords1, coords2)

TA貢獻1794條經(jīng)驗 獲得超7個贊
如果您的泛型函數(shù)應(yīng)該始終具有同構(gòu)參數(shù)和返回類型,那么首先僅使用原語為您的函數(shù)定義基本情況,然后使用包裝函數(shù)遍歷您的參數(shù)并將您的基本情況函數(shù)應(yīng)用于每個元素:
function myFunction (coord1, coord2) {
const myVar1 = coord1 * coord2;
const myVar2 = myVar1 / coord2 + myVar1;
return coord1 * (coord2 / myVar2);
}
function generic (f) {
return function g (x, ...args) {
return Array.isArray(x)
? x.map((el, i) => g(el, ...args.map(arg => arg[i])))
: f(x, ...args);
};
}
const myGenericFunction = generic(myFunction);
console.log(myGenericFunction(30, 50));
console.log(myGenericFunction([30, 40], [50, 60]));
console.log(myGenericFunction([[30, 40], [70, 80]], [[50, 60], [10, 20]]));

TA貢獻1818條經(jīng)驗 獲得超8個贊
定義每個方程的函數(shù)。
function myFunction( coord1, coord2 ) {
// Equations
let e1 = (a,b) => {return a * b;}
let e2 = (a,b,c) => {return a * b + c;}
let e3 = (a,b,c) => {return a * (b / c);}
let myVar1 = 0, myVar2 = 0, myVar3 = 0;
// if args are arrays
if ( Array.isArray( coord1 ) ) {
myVar1 = [], myVar2 = [], myVar3 = [];
for (let i = 0; i < coord1.length; i++) {
myVar1[i] = e1(coord1[i], coord2[i]);
myVar2[i] = e2(myVar1[i],coord2[i],myVar1[i]);
myVar3[i] = e3(coord1[i],coord2[i],myVar2[i]);
}
// else if args are scalar
} else {
myVar1 = e1(coord1,coord2); // this
myVar2 = e2(myVar1,coord2,myVar1); // is
myVar3 = e3(coord1,coord2,myVar2); // inefficient
}
return myVar3;
}
添加回答
舉報