是否有一种好的方法可以循环使用它来返回具有最高数字总和的数字?所以,“333”应该是记录的内容,而不是“9”。
var myArr = [ '111' , '222' , '333' ];
var result = myArr.map(function(text){
return text.match(/\d/g).reduce(function(x, y){
return +y + x;
}, 0);
});
答案 0 :(得分:2)
如果所需的输出只是源阵列中的一个数字,则您不需要.map()
功能。您可以使用.reduce()
来比较每个数字的数字总和,但返回原始数字:
const sumDigits = n => (String(n).match(/\d/g)||[]).reduce((x,y) => +x + +y, 0);
const numWithLargestSum = arr =>
arr.reduce((a, c) => sumDigits(a||0) >= sumDigits(c) ? a : c, null);
const myArr = [ '111' , '222' , '333' ];
console.log(numWithLargestSum(myArr)); // 333
console.log(numWithLargestSum([])); // null
console.log(numWithLargestSum(['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'])); // 4779-252888-3972
console.log(numWithLargestSum(['123', '111', '321', ''])); // 123

注意:
>=
比较更改为>
。null
。我已将null
作为.reduce()
操作的初始值,但随后使用||0
将其转换为0
,但是对于空数组而言,这并不是#{1}} 39; t run。.match(/\d/g)
,因为在评论中您讨论的是4779-252888-3972
等输入字符串,但如果某个项目没有数字.match()
则返回{ {1}}所以我已使用null
来防范,以便在||[]
函数中调用.reduce()
结果。比添加sumDigits()
更容易。答案 1 :(得分:0)
原谅这种邋,,但是这样的事情呢?
此方法使用在循环中进行比较的变量来查找最高总数,同时使用第二个变量来存储最高的字符串表示。
var myArr = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'];
var highest_string = 0;
var highest_total = 0;
function add(string) {
string = string.replace(/-/g, "").split('');
var sum = 0;
for (var i = 0; i < string.length; i++) {
sum += parseInt(string[i], 10);
}
return sum;
}
for (var i = 0; i < myArr.length; i++) {
if(add(myArr[i]) > highest_total) {
highest_string = myArr[i];
highest_total = add(myArr[i]);
}
// Also log matchers
else if (add(myArr[i]) == highest_total) {
console.log(myArr[i]);
}
}
console.log(highest_string);
&#13;
希望这有帮助! :)
答案 2 :(得分:0)
var myArr = [ '111' , '222' , '333'];
var result = myArr.map(function(text){
var num = text.replace(/[^\d]/g, '') || '0';
return new Function("return " + num.split("").join("+"))();
});
var max = Math.max.apply(Math, result);
var index = result.indexOf(max);
console.log("highest------",myArr[index])
&#13;
答案 3 :(得分:0)
你可以试试这个,
Array.prototype.max = function() {
return Math.max.apply(null, this);
};
var myArr = [ '111' , '222' , '333' ];
var result = myArr.map(function(text){
return text.split('').reduce((a, b) => Number(a) + Number(b), 0);
});
console.log(result);
console.log(Math.max.apply(null, result));
答案 4 :(得分:0)
var myArr = ['111', '222', '444', '333'];
var indexOfMaxValue = myArr.map(function(str){
return str.split("").reduce((x,y) => +x + +y, 0);
}).reduce((max, x, i, arr) => x > arr[max] ? i : max, 0);
console.log("indexOfMaxValue: " , indexOfMaxValue, ", the original value was: ", myArr[indexOfMaxValue]);
&#13;
答案 5 :(得分:0)
let f = s => s.split('').reduce((a, b) => +b+a || a, 0);
document.write( ["1-2", "3-4"].reduce((a, b) => f(a) > f(b) ? a : b) ); // "3-4"