比较Javascript中每个数组属性的数值

时间:2016-07-20 02:55:38

标签: javascript arrays function variables compare

我正在努力寻找解决方案:

要求用户按顺序输入一组随机数字:

var num1 = prompt("Enter 1st set of numbers");
var num2 = prompt("Enter 2nd set of numbers"); 
var num3 = prompt("Enter 3rd set of numbers");

var myNumbers =[num1, num2, num3];

现在我试图比较数组中每个元素的数字总和。例如,如果myNumbers [0] = 32,myNumber [1] = 45,那么比较5(3 + 2)和9(4 + 5)的函数是什么?

我试图通过添加该元素中的数字来比较每个元素的总和,并返回最大的数字。因此,如果num1 = 1234,则myNumbers [0]的总和应为10.通过比较,如果num2 = 3456,则总和应为18,该函数应返回num2。

3 个答案:

答案 0 :(得分:1)

var num1 = prompt("Enter 1st set of numbers");
var num2 = prompt("Enter 2nd set of numbers"); 
var num3 = prompt("Enter 3rd set of numbers");

// finds the sum of your array, parsing each element as an integer
var sum = function(array){
  var digits = array.split("")
  return digits.reduce(function(a, b) {return parseInt(a, 10) + parseInt(b, 10)})
}

var myNumbers =[num1, num2, num3]
var findLargest = function(array){
  var answer
  var largest = 0
  array.forEach(function(input){
        // check if this is the largest sum
        if (sum(input) == largest){
          // check if there is already a running set of equal sums
  	  if (typeof(answer) == Object) answer.push(input)
          // create set of equal sums if not
          else answer = [answer, input]
        }
        else if (sum(input) > largest) {
          largest = sum(input)
          answer = input
        }
      })
      return answer
    }

alert(findLargest(myNumbers))

https://jsfiddle.net/gmebk2Ly/7/

这也会检查是否存在多个相等的输入

答案 1 :(得分:0)

如果要按数字的总和对列表进行排序,可以执行以下操作。比较器函数查找列表成员中的数字总和,然后比较它们。如果您只想对字符串中的数字求和,您也可以从此解决方案中提取执行此操作的代码。

myNumbers.sort(function(a,b) {
    var sumA = 0;
    var sumB = 0;
    a.split("").forEach(function(digit) {
        sumA+=parseInt(digit);
    });
    b.split("").forEach(function(digit) {
        sumB+=parseInt(digit);
    });
    return sumA-sumB;
});

答案 2 :(得分:0)

让我们将其分解为两个子问题:首先,找到数字的总和;第二,找到数组的最大值。对于第二个,我们已经有Math.max

首先,我们将进一步细分,然后首先编写一个函数来获取数字:

function digits(x) { return String(x).match(/\d/g).map(Number); }

总结数字,我们只说

function sumDigits(x) { return sum(digits(x)); }

对于sum,你可以在SO上找到很多例子,但最简单的是

function sum(array) { return array.reduce(add, 0); }

add很容易:

function add(a, b) { return a + b; }

现在,要获取数组中每个元素的最大数字总和:

function maxSumDigits(array) { return Math.max(...array.map(sumDigits)); }

以上使用ES6传播运营商。在ES5中:

return Math.max.apply(0, array.map(sumDigits));

以这种方式编写代码的优点首先是,您最终会得到可以重复使用的有用的小实用程序;第二,代码更容易阅读并向自己证明它是正确的;第三,更容易处理规格变化,例如想要找到数字乘积而不是总和的最小值而不是最大值。

function digits(x)           { return String(x).match(/\d/g) . map(Number); }
function sumDigits(x)        { return sum(digits(x)); }
function sum(array)          { return array . reduce(add, 0); }
function add(a, b)           { return a + b; }
function maxSumDigits(array) { return Math.max(...array . map(sumDigits)); }

console.log(maxSumDigits([1234, 3456]));

这将返回最大的总和。要找到数字总和最大的元素,最简单的方法是记住数字和的数组,然后查看:

function maxSumDigits(array) { 
  var sums = array . map(sumDigits);
  var max = Math.max(...sums);
  return array[sums.indexOf(max)];
}