var strings = [ '123-456-7777', '223-456-7777', '123-456-7777' ];
var ints = strings.map(el => el.replace(/-/g, '').split('').reduce((sum, a) => sum + +a, 0));
console.log(ints);
if( ints[0] > ints[1] && ints[0] > ints[2]){
console.log(strings[0]);
console.log(ints[0]);
}else if (ints[1] > ints[0] && ints[1] > ints[2]) {
console.log(strings[1]);
console.log(ints[1]);
}else{
console.log(strings[2]);
console.log(ints[2]);
};
我有几个问题。
答案 0 :(得分:0)
Math.max.apply(Math, ints)
为您提供最大值。与indexOf
一起,您可以获得最大值的索引。
var strings = [ '123-456-7777', '223-456-7777', '123-456-7777' ];
var ints = strings.map(el => el.replace(/-/g, '').split('').reduce((sum, a) => sum + +a, 0));
console.log(ints);
var max = Math.max.apply(Math, ints);
console.log(strings[ints.indexOf(max)], max); //223-456-7777, 50
答案 1 :(得分:0)
您不需要switch
或if...else
。您可以使用Math.max
并将数组传递给它,使用apply
调用它。
<强>代码:强>
Math.max.apply(Math, arr.map(str => str.match(/\d/g).reduce((sum, num) => sum + +num, 0)));
var arr = ['123-456-7777', '223-456-7777', '123-456-7777'];
var max = Math.max.apply(Math, arr.map(str => str.match(/\d/g).reduce((sum, num) => sum + +num, 0)));
console.log(max);
document.write(max);
代码说明:
str.match(/\d/g).reduce((sum, num) => sum + +num, 0))
将给出主数组元素中各个数字的总和。
arr.map
会将每个数组的元素更新为返回值,即各个数字的总和。
Math.max.apply(Math, array)
将调用Math.max
函数并将数组元素作为单个参数传递。
ES5中的等效代码:
var arr = ['123-456-7777', '223-456-7777', '123-456-7777'];
var max = Math.max.apply(Math, arr.map(function (str) {
return str.match(/\d/g).reduce(function (sum, num) {
return sum + +num;
}, 0)
}));
console.log(max);
答案 2 :(得分:0)
您始终可以对数组进行排序并使用max元素:
strings.map(function(e){ return e.split('-').reduce(function(a,b){return +a + +b}) }).sort(function(a,b){return b-a})[0];
答案 3 :(得分:0)
尝试使用for
循环,while
循环,delete
,Array.prototype.sort()
var strings = ['123-456-7777', '223-456-7777', '123-456-7777'];
for (var i = 0, len = strings.length, res = Array(len).fill(0); i < len; i++) {
var j = strings[i].length, n = -1;
while (--j > n) {
if (!isNaN(strings[i][j])) {
res[i] += +strings[i][j]
}
};
if (res[i - 1] && res[i] > res[i - 1]) {
delete res[i - 1]
} else {
if (res[i] < res[i - 1]) {
delete res[i];
res.sort(Boolean)
}
};
};
document.body.textContent = res.join(" ")
&#13;