如何在长数组中找到每个元素的总和?

时间:2016-03-21 00:48:34

标签: javascript arrays indexing sum addition

这个问题需要在Javascript中解答。

例如,我有一系列电话号码:

var phoneNumbers = ['123-434-4455', '123-495-8475', '484-728-3456'];

索引0(123-434-4455)的电话号码将添加为1 + 2 + 3 + 4 + 3 + 4 + 4 + 4 + 5 + 5,总计为35。

我猜这会涉及某种循环(for循环或方法.forEach),因为我需要对数组中的多个电话号码执行此操作,这些电话号码可能是由计算机随机生成的,所以长度和金额会有所不同。

另外,我想知道连字符是否重要,在这种情况下我找到.replaceAll("-","");

我在这里研究了一些涉及.split,.parsInt,.map,.toString,.reduce,.digitSum等的其他方法。它们看起来相当复杂,特别是因为我在开始课程中(但我对编程很新 - 这是我的第一篇文章)。另外,我不想发布完整的问题,因为我真的想单独解决这个问题,但这是我最常关注的部分。如果以前已经回答过,请原谅我!就像我说的......编程新手。

我还需要确定哪个电话号码具有最后一个最大的数字总和,并使用return语句以原始形式返回所需的电话号码。

5 个答案:

答案 0 :(得分:3)

您可以使用mapreduce数组方法:

['123-434-4455', '123-495-8475', '484-728-3456'].map(function(str) {
  return str.split('').reduce(function(a,b) {
    return a + (+b || 0);
  }, 0);
}); // [ 35, 48, 51 ]

一些注意事项:

  • split('')将字符串拆分为字符数组
  • +bb强制转换为数字,例如"5"5"-"NaN
  • 如果+b || 0为假(0+b),则
  • 0将返回NaN,否则会+b

答案 1 :(得分:1)

此代码将执行此操作:

var phoneNumbers = ["123-434-4455", "123-495-8475", "484-728-3456"];

for (var i=0; i<phoneNumbers.length; i++) {//For every phone number
    var total=0; //create a total variable
    var indNumbers = phoneNumbers[i].replace(/-/g, ""); //remove all dashes
    for (var j=0; j<indNumbers.length; j++) {//loop for all digits
        total+=parseFloat(indNumbers[j]);//add each digit to total
    }
    console.log(total);//do stuff with it here
}

所有相当标准的javascript东西。我可能使用的唯一令人困惑的是.replace方法 - 我的参数是/-/g,它可能看起来很可怕,但它相当于传递"-",除了它告诉函数替换所有实例短划线如果你确实通过"-",它只会替换第一个实例。

如果您是初学者,那么您希望了解此代码中的内容是.replaceparseFloat for循环,并使用方括号表示法访问字符串。

答案 2 :(得分:1)

&#13;
&#13;
var phoneNumbers = ["123-434-4455", "123-495-8475", "484-728-3456"];

function crossSum(arr, pos) {
  var sum = 0;
  var a = arr[pos].split("-").join("").split("");
  a.forEach(function(e, i) {
    sum += parseInt(a[i]);
  })
  return sum;
}

document.write(crossSum(phoneNumbers, 0));
&#13;
&#13;
&#13;

此函数将返回的交叉总和 你的电话号码。

只需使用crossSum(phoneNumers, 0) // 0 is the fist number of phoneNumbers

这将返回crossSum。

答案 3 :(得分:1)

添加@millerbr答案。如果您不想使用.replace,则可以在每个字符上使用parseInt / parseFloat,如果它不是数字,则这些函数返回NaN使用isNaN()函数

进行检查
var phoneNumbers = ["123-434-4455", "123-495-8475", "484-728-3456"];

for (var i=0; i < phoneNumbers.length; i++) { //For every phone number
    var total=0; //create a total variable
    for (var j=0; j < phoneNumbers.length; j++) { //loop for all digits
        var parsedNumber = parseInt(phoneNumbers[j]); // parse string to number or NaN if "-"
        if (!isNaN(parsedNumber)) { // Check if result is NaN (Not a Number).
          total += parsedNumber; //add each digit to total
        }
    }
    console.log(total);//do stuff with it here
}

答案 4 :(得分:0)

假设phoneNumbers是一个字符串数组,您确实可以循环遍历整个数组,然后在数组中的每个元素中循环遍历该字符串并检查该字符是否为数字。如果是这样,将它添加到你的总和,然后当你完成数组中的每个元素时,你有它的总和,你可以将它添加到另一个充满你的总和的数组。