选择数组中的最大值

时间:2016-01-28 06:06:46

标签: javascript

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]);
};

我有几个问题。

  1. 我可以用switch语句替换这个If语句吗?
  2. 我正在尝试打印出具有最大总和的数组的函数。还有什么其他方法可以让它看起来更好?

4 个答案:

答案 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)

您不需要switchif...else。您可以使用Math.max并将数组传递给它,使用apply调用它。

  1. 从数组元素中删除连字符
  2. 获取个人数字
  3. 获取数组中各个数字的总和
  4. 从阵列中获取最大数量。
  5. <强>代码:

    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循环,deleteArray.prototype.sort()

&#13;
&#13;
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;
&#13;
&#13;