该算法题来自于 codewars【语言: javascript】,翻译如有误差,敬请谅解~
- 任务
- 查找并返回数组中奇数的立方和。只要其中某一个值不是数字,此函数将返回undefined(在PHP中为NULL)。
- 例如:
cubeOdd([1, 2, 3, 4]),返回 28。
cubeOdd([-3,-2,2,3]),返回 0。
cubeOdd(["a",12,9,"z",42]),返回 undefined。
- 解答
- 其一
const cubeOdd = arr => {
const array = arr.filter(el=>typeof el != 'number');
let sum = 0;
array.length ? sum = undefined : arr.filter(el=>el%2).forEach(el => {sum += Math.pow(el,3)});
return sum;
}
- 其二
function cubeOdd(arr) {
var sum = 0;
for (var i = 0; i <arr.length; i++){
var cubed = (arr[i]*arr[i]*arr[i]);
if (isNaN(cubed)) return undefined;
if(cubed % 2 != 0 )sum += cubed;
}
return sum;
}
- 其三
const cubeOdd = arr => arr.some(x=> +x !== x) ? undefined : arr.filter(x=>x%2!=0).reduce((s,x)=>s+x**3,0);
- 其四
const undefiner = v => isNaN(v) ? undefined : v;
const cubeOdd = arr => undefiner(arr.reduce((s, v) => s + v*v%2*v*v*v, 0));
- 其五
const cubeOdd=a=>a.filter(x=>typeof x != "number").length?undefined:a.filter(x=>x%2).map(x=>Math.pow(x,3)).reduce((a,b)=>a+b,0)