2017-04-08 49 views
1

我有一個名爲superPower的函數,它接受一組數字並返回一個數字。這個數字是通過將每個元素乘以10到它在數組中的索引位置的冪來創建的,然後將每個元素添加到一起。從ES5到ES6的superPower功能

這是ES5的版本我需要重構到ES6

ArrayFunctions.superPower = function(array){ 
return array.reduce(function(sum, number, index){ 
return sum + (number * (Math.pow(10, index))); 
}); 
}; 

這是我到目前爲止已經試過,但它不工作:

static superPower (array) { 
    return array.reduce(((sum, number, index) => sum + number + index) { 
    return (sum + (number => number ** (10, index))); 
    }); 
} 

找到婁的完整代碼:

class ArrayFunctions { 
 
    constructor() { 
 
    } 
 
    static printSpecial (array) { 
 
    return array.join(" --- "); 
 
    } 
 
    static doubleArray (array) { 
 
     return array.map(number => number * 2); 
 
    } 
 
    static superPower (array) { 
 
    // return array.reduce(((sum, number, index) => sum + number + index); { 
 
    //  return sum + (number * (Math.pow(10, index))); 
 
    // }); 
 
    } 
 
} 
 

 
// Method to refactor 
 

 
ArrayFunctions.superPower = function(array){ 
 
    return array.reduce(function(sum, number, index){ 
 
    return sum + (number * (Math.pow(10, index))); 
 
    }); 
 
}; 
 

 
// Here I am testing how to refactor it 
 
// ArrayFunctions.superPower = function(array){ 
 
// return array.reduce(((sum, number, index) => sum + number + index) { 
 
// return (sum + (number => number ** (10, index))); 
 
// }); 
 
// };

+0

我將提供整個來龍去脈,你re right @mplungjan – randseed1724

+0

@RobG我jsut添加了一個片段,向您展示整個上下文。在工作之前,我正在測試課堂外的重構。它工作後,我會delate的代碼,並將其添加到類的主體。 – randseed1724

+1

從舊的瀏覽器中不工作,從ES5到6的預期改進 – mplungjan

回答

1

這就像:

ArrayFunctions.superPower = function(array){ 
return array.reduce((sum, number, index) => { 
    return sum+number*Math.pow(10, index); 
}); 
} 
+0

謝謝,這正是我一直在尋找的! – randseed1724

+0

@ randseed1724如果不需要進一步的幫助,您應該接受答案。 – gyre

+0

@gyre完成,ty! – randseed1724

0

我想你要尋找的是:

ArrayFunctions = {}; 
 
ArrayFunctions.superPower = (array => array.reduce(
 
    (sum, number, index) => sum + number * 10 ** index), 0) 
 
); 
 

 
console.log(ArrayFunctions.superPower([1,2,3]));

,因爲它沒有這不會在我目前的Safari瀏覽器上運行支持指數運算符**,我需要使用:

ArrayFunctions = {}; 
 
ArrayFunctions.superPower = (array => array.reduce(
 
    (sum, number, index) => sum + number * Math.pow(10, index), 0) 
 
); 
 

 
console.log(ArrayFunctions.superPower([1,2,3]));

用在類聲明不能使用箭頭函數定義靜態方法中的一種回報要求:

class ArrayFunctions { 
 
    constructor(){} 
 

 
    static superPower (array) { 
 
    return array.reduce((sum, number, index) => sum + number * Math.pow(10, index),0); 
 
    } 
 
} 
 

 
console.log(ArrayFunctions.superPower([1,2,3]));

但是,如果類語法被簡單地用來創建一個對象的方法,那麼很難證明它的價值:

var arrayFunctions = { 
 
    superPower : (array) => array.reduce((sum, number, index) => sum + number * Math.pow(10, index), 0) 
 
}; 
 
    
 
console.log(arrayFunctions.superPower([1,2,3]));

+0

其實[link](http://stackoverflow.com/users/2438423/phpglue)說得對。 – randseed1724

+0

這取決於您的「正確」標準。如果您使用的是箭頭函數,則不需要* return *(在這種情況下),因爲單行函數默認返回其語句的值。並且不需要* function *關鍵字。 – RobG

+0

是的,但請記住,我的海豚是在課堂內部使用它。我不能在課堂內部使用你的解決方案,它不起作用。 – randseed1724

0

我下面的代碼添加到我的類體,它完美地工作:

return array.reduce((sum, number, index) => { 
return sum+number*Math.pow(10, index); 

現在是這樣的:

class ArrayFunctions { 
constructor() { 
} 
    static printSpecial (array) { 
    return array.join(" --- "); 
    } 
    static doubleArray (array) { 
    return array.map(number => number * 2); 
    } 
    static superPower (array) { 
    return array.reduce((sum, number, index) => { 
    return sum+number*Math.pow(10, index); 
}); 
} 
} 

module.exports = ArrayFunctions; 

謝謝@PHPglue

+0

接受之前給出的答案可能就足夠了。 –

+0

@DaveNewton你究竟是什麼意思或建議? – randseed1724

0

千萬不要使用classstatic函數只能使用對象字面量!(或者只是使用唯一命名的出口,如果你想爲默認出口模塊對象)

您的代碼應該成爲

const ArrayFunctions = { 
    printSpecial(array) { 
    return array.join(" --- "); 
    } 
    doubleArray(array) { 
    return array.map(number => number * 2); 
    } 
    superPower(array) { 
    return array.reduce((sum, number, index) => 
     sum + number * 10 ** index; 
    ); 
    } 
}; 

請注意,您還可以通過做一個reduceRight,而不是提高代碼的效率在reduce,並通過傳遞0爲開始提高可靠性,使該函數返回0而不是拋出一個異常:

return array.reduceRight((acc, number) => number + 10 * acc, 0);