在JavaScript

时间:2018-04-09 17:47:00

标签: javascript arrays function

我正在尝试创建一个程序,它将取一个数字中的数字并相互相乘。因此583将是5*8*3 = 120

它没有按预期工作,它只返回放入的number

我该如何解决?

以下是代码:

function persistence(num) {
  //code me
  numString = num.toString();
  numArray = numString.split().map(function(t) {
    return parseInt(t)
  });


  function reducer(theNumArray) {
    let sum = 1;
    for (var i = 0; i < theNumArray.length; i++) {
      sum = sum * theNumArray[i];

    }
    return sum;
  }
  newNum = reducer(numArray);

  console.log(newNum);
};

persistence(485);

5 个答案:

答案 0 :(得分:5)

您可以使用空字符串拆分字符串,以获取单个数字。然后隐藏,如果需要所有字符串到一个数字。

function reducer(theNumArray) {
    var i, sum = 1;
    for (i = 0; i < theNumArray.length; i++) {
        sum *= theNumArray[i];
    }
    return sum;
}

function persistence(num) {
    var numArray = num.toString().split('').map(Number);
    return reducer(numArray);
}

console.log(persistence(485));

较短的方法可能是通过使用包含字符串迭代器的扩展语法来获取单个数字,然后只需将值相乘并返回结果。

function persistence(number) {
    return [...number.toString()].reduce((p, v) => p * v);
}

console.log(persistence(485));

答案 1 :(得分:3)

您只需要在split('')

内进行更改

<强>样本

function persistence(num) {
  //code me
  numString = num.toString();
  numArray = numString.split('').map(function(t) {
    return parseInt(t)
  });

  function reducer(theNumArray) {
    let sum = 1;
    for (var i = 0; i < theNumArray.length; i++) {
      sum = sum * theNumArray[i];

    }
    return sum;
  }
  newNum = reducer(numArray);

  console.log(newNum);
};

persistence(485);
.as-console-wrapper { max-height: 100% !important; top: 0; }

您也可以使用reduce方法进行数组。

  

ES5

function persistence(num) {
  let result = num.toString().split('').reduce(function(total, v) {
    return total * v
  }, 1);
  console.log(result);
};

persistence(485);
.as-console-wrapper { max-height: 100% !important; top: 0; }

  

ES6

使用ES6的Spread_syntax可以更轻松。

function persistence(num) {
  let result = [...num.toString()].reduce((total, v) => total * v, 1);
  console.log(result);
};

persistence(485);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:1)

您不需要拆分字符串,只需按编号引用字符即可。这似乎是4 * 8 * 5 = 160的好例子。

  

另一种方式(在ECMAScript 5中引入)是将字符串视为   类似于数组的对象,其中单个字符对应于a   数字指数

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

/clr

答案 3 :(得分:1)

假设num是一个正整数:

    function persistence(num) {
    var ans=1;    
    while( num!==0){
            ans=ans*(num-Math.floor(num/10)*10);
            num=Math.floor(num/10);

        }
        console.log(ans);
    }

    persistence(123);

这是基于(num-Math.floor(num / 10)* 10)提取最低有效数字。例如

123 - Math.floor(123/10)* 10

123 - 12 * 10

123 - 120

3

依此类推后,将数字减去一位数除以10。 你不需要字符串。

答案 4 :(得分:1)

根据this,分割方法会根据输入有不同的结果(显然是对的?):

无分隔符 - &gt;如果没有将分隔符参数传递给split方法,则生成的数组将包含一个由整个字符串组成的元素

所以,基本上从这里开始:

numString.split()

你将得到一个包含字符串(你的号码)的数组,这应该改为:

numString.split('')

所以你的整个代码应该是这样的:

 function persistence(num) {
    numString = num.toString();
    numArray = numString.split().map(function(t) {
       return parseInt(t)
    });


 function reducer(theNumArray) {
     let sum = 1;
     for (var i = 0; i < theNumArray.length; i++) {
         sum = sum * theNumArray[i];
     }
     return sum;
 }
 newNum = reducer(numArray);

 console.log(newNum);
};

persistence(485);