我正在努力寻找解决方案:
要求用户按顺序输入一组随机数字:
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。
答案 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)];
}