Javascript 返回数组中的最高位数和

Javascript 返回数组中的最高位数和,javascript,arrays,Javascript,Arrays,有没有一种好方法可以循环使用这个函数,让它返回其数字总和最高的数字?因此,“333”应该是记录的内容,而不是“9” 请原谅我的草率,但是像这样的事情呢 这种方法在循环中使用一个与之比较的变量来查找最高的总数,同时使用第二个变量来存储最高的字符串表示 var myArr=['4916-2600-1804-0530','4779-252888-3972','4252-278893-7978','4556-4242-9283-2260']; var\u字符串=0; var最高_总计=0; 函数添加(

有没有一种好方法可以循环使用这个函数,让它返回其数字总和最高的数字?因此,“333”应该是记录的内容,而不是“9”


请原谅我的草率,但是像这样的事情呢

这种方法在循环中使用一个与之比较的变量来查找最高的总数,同时使用第二个变量来存储最高的字符串表示

var myArr=['4916-2600-1804-0530','4779-252888-3972','4252-278893-7978','4556-4242-9283-2260'];
var\u字符串=0;
var最高_总计=0;
函数添加(字符串){
string=string.replace(/-/g,”).split(“”);
var总和=0;
对于(变量i=0;i最高总金额){
最高_字符串=myArr[i];
最高总金额=加总金额(myArr[i]);
}
//还有日志匹配器
否则,如果(加上(myArr[i])==最高总数){
console.log(myArr[i]);
}
}
console.log(最高的_字符串)
var myArr=['111','222','333'];
var result=myArr.map(函数(文本){
var num=text.replace(/[^\d]/g',)| |“0”;
返回新函数(“return”+num.split(“”.join(“”));
});
var max=Math.max.apply(数学,结果);
var指数=结果指数(最大值);

log(“highest------”,myArr[index])
您可以用这个

Array.prototype.max=function(){
返回Math.max.apply(null,this);
};
var myArr=['111','222','333'];
var result=myArr.map(函数(文本){
返回文本。拆分(“”)。减少((a,b)=>数字(a)+数字(b),0);
});
控制台日志(结果);

log(Math.max.apply(null,result))如果所需输出只是源数组中的一个数字,则不需要使用
.map()
函数。您可以使用
.reduce()
比较每个数字的数字总和,但返回原始数字:

const sumdights=n=>(字符串(n).match(/\d/g)| |[]).reduce((x,y)=>+x++y,0);
常量numWithLargestSum=arr=>
arr.reduce((a,c)=>sumdights(a | | 0)>=sumdights(c)?a:c,null);
常量myArr=['111','222','333'];
console.log(numWithLargestSum(myArr));//333
console.log(numWithLargestSum([]);//无效的
console.log(最大值(['4916-2600-1804-0530','4779-252888-3972','4252-278893-7978','4556-4242-9283-2260']);//4779-252888-3972
console.log(numWithLargestSum(['123','111','321','']);//123
var myArr=['111','222','444','333'];
var indexOfMaxValue=myArr.map(函数(str){
返回str.split(“”)。reduce((x,y)=>+x++y,0);
}).减少((最大,x,i,arr)=>x>arr[max]?i:max,0);
log(“indexOfMaxValue:,indexOfMaxValue,”,原始值为:,myArr[indexOfMaxValue])
设f=s=>s.split('').reduce((a,b)=>+b+a | a,0);

文件。写([“1-2”,“3-4”])。减少((a,b)=>f(a)>f(b)?a:b));//“3-4”
语言是什么?这是用于javascript的。这是javascript;我刚刚编辑了这个问题,添加了标记:)的确如此。尽管有没有一种方法可以把我的例子中的正则表达式保留在那里?有一种方法,是的。。。尽管考虑到上述结构,这并不是真的必要。您的正则表达式
/\d/g
与数字匹配,这与
parseInt()
基本相同——它只接受从字符串中提取的整数。您可以使用
sum+=string[i].match(/\d/g)
而不是
sum+=parseInt(字符串[i],10)如果你真的想:)当我经过这个数组时,['4916-2600-1804-0530','4779-252888-3972','4252-278893-7978','4556-4242-9283-2260']它出现时没有定义?@yupyupyup-发现得好!我通过添加
string.replace(/-/g,“”)
来修复上述代码,然后再拆分字符串(在
add
的第一行)。我还包括了示例数组以展示修复:)数组中的两个数字的总数相同。有没有一个好方法可以让它成为这两种方法中的第二种?在这个场景中,它记录了第一个。这很有说服力。在实现它的无限可能的方法中,这是最好的解决方案,具有完美的抽象量。
var myArr = [ '111' , '222' , '333' ];
var result = myArr.map(function(text){
  return text.match(/\d/g).reduce(function(x, y){
    return +y + x;
  }, 0);
});