从ES5到ES6的superPower功能

时间:2017-04-08 05:08:50

标签: javascript ecmascript-6 static-methods arrow-functions

我有一个名为superPower的函数,它接受一个数字数组,并返回一个数字。这个数字是通过将每个元素乘以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) ));
// });
// };

4 个答案:

答案 0 :(得分:1)

就像:

if(XORO == 2 || XORO == 4 || XORO == 6...

答案 1 :(得分: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]));




答案 2 :(得分: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

答案 3 :(得分:0)

永远不要仅使用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来提高可靠性,以便函数返回0而不是抛出异常:

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