使用数学运算符循环对字符串数组(内部数字)执行数学运算

时间:2016-10-02 14:00:58

标签: javascript arrays

我有一个字符串数组,字符串中包含数字。我还需要对这些数字执行一系列操作。它们遵循+, - ,*,/的顺序。如果数量超过4,则返回加号。



  function calculate(n, operator, b) {
    switch (operator) {
      case 1:
        n += b;
        return n;
      case 2:
        n -= b;
        return n;
      case 3:
        n *= b;
        return n;
      case 4:
        n /= b;
        return n;
    }
}
numberArray = ["23", "44", "99", "324", "19"]
 let n=0;
let c = 1;
for (var i = 0; i < numberArray.length; i++) {

    calculate(n, c, parseInt(numberArray[i]));
    if ( c < 4) {
      c++;
    } else {
      c=1;
    }
  }
console.log(n);
&#13;
&#13;
&#13;

由于某种原因,switch语句没有正确运行。它没有执行操作并返回n,所以我可以从计算中得到总数。

2 个答案:

答案 0 :(得分:3)

  我认为n += b;在函数中将更新n的值。

确实如此,但n不是代码中的n 调用 calculate。它是n calculate的参数。calculate(n, c, parseInt(numbersArray[i])); n的参数。当你这样做时:

calculate

n = calculate(n, c, parseInt(numbersArray[i])); 会传递到function calculate(n, operator, b) { switch (operator) { case 1: n += b; return n; case 2: n -= b; return n; case 3: n *= b; return n; case 4: n /= b; return n; } } numberArray = ["23", "44", "99", "324", "19"] let n=0; let c = 1; for (var i = 0; i < numberArray.length; i++) { n = calculate(n, c, parseInt(numberArray[i])); if ( c < 4) { c++; } else { c=1; } } console.log(n);,而不会引用变量本身。 (这被称为&#34;传递值。&#34; JavaScript总是传递变量的。)参数就像一个局部变量;更新它在函数外没有任何影响。

只需使用结果:

switch

更新了代码段:

&#13;
&#13;
switch (operator) {
  case 1:
    return n + b;
  case 2:
    return n - b;
  case 3:
    return n *= b;
  case 4:
    return n / b;
}
&#13;
&#13;
&#13;

当然,这意味着您的c可以更简单:

if

只是FWIW,还有一种更新c = (c % 4) + 1; 的聪明方法,以避免 @Override public void create() { float aspectRatio = (float)Gdx.graphics.getWidth() / (float)Gdx.graphics.getHeight(); cam = new OrthographicCamera(); viewport = new FitViewport(MyGdxGame.WIDTH * aspectRatio, MyGdxGame.HEIGHT, cam); [...] } @Override public void render(SpriteBatch batch) { cam.update(); batch.setProjectionMatrix(cam.combined); batch.begin(); em.render(batch); //render Ship and Asteroids [...] } @Override public void resize(int width, int height) { viewport.update(width, height); cam.position.set(MyGdxGame.WIDTH / 2, MyGdxGame.HEIGHT /2, 0); }

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());
if(calendar.getTimeInMillis() < System.currentTimeMillis())
       calendar.add(Calendar.DAY, 1);

那将为你缠身。

答案 1 :(得分:0)

你可以使用一个没有开关结构的更紧凑的版本,但是有一个用于函数的数组。

它与索引一起使用,并且基于零,因此对第一个或最后一个项目没有麻烦,只需使用模数运算符%获取数组的长度并获得正确的索引。

&#13;
&#13;
let array = ["23", "44", "99", "324", "19"],
    fn = [(a, b) => a + b, (a, b) => a - b, (a, b) => a * b, (a, b) => a / b],
    n = array.reduce((n, a, i) => fn[i % fn.length](n, a), 0);

console.log(n);
&#13;
&#13;
&#13;