从 ES5 到 ES6 的 superPower 函数
superPower function from ES5 to ES6
我有一个名为 superPower 的函数,它接受一个数字数组,returns 一个数字。这个数字是通过将每个元素乘以 10 对其在数组中的索引位置的幂,然后将每个元素加在一起而创建的。
这是我需要重构为 ES6 的 ES5 版本
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) ));
// });
// };
就像:
ArrayFunctions.superPower = function(array){
return array.reduce((sum, number, index) => {
return sum+number*Math.pow(10, index);
});
}
我想你要找的是:
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 声明中使用 return 是必需的,因为您不能使用箭头函数来定义静态方法:
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]));
然而,如果 class 语法仅用于创建对象的方法,那么很难证明它的合理性:
var arrayFunctions = {
superPower : (array) => array.reduce((sum, number, index) => sum + number * Math.pow(10, index), 0)
};
console.log(arrayFunctions.superPower([1,2,3]));
我将以下代码添加到我的 class 正文中,它运行良好:
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
切勿仅将 class
与 static
函数一起使用,使用对象字面量! (或者只使用命名导出,如果你想默认导出模块对象)
你的代码应该变成
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
作为开始来提高可靠性,以便函数 returns 0
而不是抛出异常:
return array.reduceRight((acc, number) => number + 10 * acc, 0);
我有一个名为 superPower 的函数,它接受一个数字数组,returns 一个数字。这个数字是通过将每个元素乘以 10 对其在数组中的索引位置的幂,然后将每个元素加在一起而创建的。
这是我需要重构为 ES6 的 ES5 版本
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) ));
// });
// };
就像:
ArrayFunctions.superPower = function(array){
return array.reduce((sum, number, index) => {
return sum+number*Math.pow(10, index);
});
}
我想你要找的是:
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 声明中使用 return 是必需的,因为您不能使用箭头函数来定义静态方法:
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]));
然而,如果 class 语法仅用于创建对象的方法,那么很难证明它的合理性:
var arrayFunctions = {
superPower : (array) => array.reduce((sum, number, index) => sum + number * Math.pow(10, index), 0)
};
console.log(arrayFunctions.superPower([1,2,3]));
我将以下代码添加到我的 class 正文中,它运行良好:
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
切勿仅将 class
与 static
函数一起使用,使用对象字面量! (或者只使用命名导出,如果你想默认导出模块对象)
你的代码应该变成
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
作为开始来提高可靠性,以便函数 returns 0
而不是抛出异常:
return array.reduceRight((acc, number) => number + 10 * acc, 0);