sumFunc 不一起计算数组数字

问题描述 投票:0回答:1

问题是函数 sumFunc 没有一起计算 array2 数字。输出返回 3 5 7 8 9 11 13 15 16 17 19 20

下面是JS代码、输出和预期输出。

代码:

function checkFunc(arr, f1, f2, f3) {
  const containsStrings = arr.some(item => typeof item === 'string');
  const containsNumbers = arr.some(item => typeof item === 'number' && !isNaN(item));

  if (containsStrings && !containsNumbers) {
    console.log('Taulukossa tekstiä. Yhdistetään sanat:');
  } else if (!containsStrings && containsNumbers) {
    console.log('Taulukossa vain lukuja. Lasketaan summa:');
  } else if (containsStrings && containsNumbers) {
    console.log('Taulukossa tekstiä ja numeroita. Yhdistetään sanat:');
  } else {
    console.log('Ei tekstiä tai numeroita');
  }
}

function combineFunc(arr) {
  return arr.join(' ') + (' ');
}

function sumFunc(arr) {
  var sum = 0;
  for (var i = 0; i < arr.length; i++) {
    if (typeof arr[i] === 'number' && !isNaN(arr[i])) {
      sum += arr[i];
    }
  }
  return sum;
}

//cant change code under this 

var array1 = ["Tämän", "taulukon", "alkiot", "muodostavat", "lauseen"];
var array2 = [3, 5, 7, 8, 9, 11, 13, 15, 16, 17, 19, 20];
var array3 = [5, "kertaa", 3, "on", 15];

function someFunction(arr, f1, f2, f3) {
  if (!f1(arr)) {
    console.log(f2(arr));
  } else {
    console.log(f3(arr));
  }
}

someFunction(array1, checkFunc, combineFunc, sumFunc);
someFunction(array2, checkFunc, combineFunc, sumFunc);
someFunction(array3, checkFunc, combineFunc, sumFunc);

输出:

Taulukossa tekstiä. Yhdistetään sanat:
Tämän taulukon alkiot muodostavat lauseen 
Taulukossa vain lukuja. Lasketaan summa:
3 5 7 8 9 11 13 15 16 17 19 20 
Taulukossa tekstiä ja numeroita. Yhdistetään sanat:
5 kertaa 3 on 15 

预期输出:

Taulukossa tekstiä. Yhdistetään sanat:
Tämän taulukon alkiot muodostavat lauseen 
Taulukossa vain lukuja. Lasketaan summa:
143
Taulukossa tekstiä. Yhdistetään sanat:
5 kertaa 3 on 15 

我尝试更改 sumFunc 函数,但看起来它已经是正确的。我也尝试过 .reduce :

function sumFunc(arr) {
    var sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
    return sum; 
}

但这没有用。问题可能出在其他地方。我认为这可能是 checkFunc 但我不确定,因为我是从 js 开始的。

javascript arrays sum
1个回答
0
投票

正确的代码应该是这样的:


function checkFunc(arr, f1, f2, f3) {
  const containsStrings = arr.some(item => typeof item === 'string');
  const containsNumbers = arr.some(item => typeof item === 'number' && !isNaN(item));

  if (containsStrings && !containsNumbers) {
    console.log('Taulukossa tekstiä. Yhdistetään sanat:');
    return false;

  } else if (!containsStrings && containsNumbers) {
    console.log('Taulukossa vain lukuja. Lasketaan summa:');
    return true;

  } else if (containsStrings && containsNumbers) {
    console.log('Taulukossa tekstiä ja numeroita. Yhdistetään sanat:');
    return false;

  } else {
    console.log('Ei tekstiä tai numeroita');
    return false;
  }
}

function combineFunc(arr) {
  return arr.join(' ') + (' ');
}

function sumFunc(arr) {
  var sum = 0;
  for (var i = 0; i < arr.length; i++) {
    if (typeof arr[i] === 'number' && !isNaN(arr[i])) {
      sum += arr[i];
    }
  }
  return sum;
}

var array1 = ["Tämän", "taulukon", "alkiot", "muodostavat", "lauseen"];
var array2 = [3, 5, 7, 8, 9, 11, 13, 15, 16, 17, 19, 20];
var array3 = [5, "kertaa", 3, "on", 15];

function someFunction(arr, f1, f2, f3) {
  if (!f1(arr)) {
    console.log(f2(arr));
  } else {
    console.log(f3(arr));
  }
}

someFunction(array1, checkFunc, combineFunc, sumFunc);
someFunction(array2, checkFunc, combineFunc, sumFunc);
someFunction(array3, checkFunc, combineFunc, sumFunc);
© www.soinside.com 2019 - 2024. All rights reserved.