选取数组中最大的数字

时间:2016-01-29 20:56:21

标签: javascript

  

编写单个函数,输出输入数组中的“最大”电话号码(如果多个数字同样大,则返回最后一个)。假设电话号码是由破折号分隔的10位数的字符串。

我写了一个函数来回答上面的问题。它未定义。有人可以帮我找到错误吗。我觉得我接近答案。

var largestNumber = function(strings) {
  var ints = strings.map(function(el) {
    return el.replace(/-/g, '').split('').reduce(function(previousValue, currentValue, currentIndex, array) {
      return previousValue + currentValue;
    });
  });

  console.log(ints);

  var largest = Math.max.apply(Math, ints);
  return strings[ints.lastIndexOf(largest)];
};

console.log(largestNumber(['111-111-1111', '111-111-1112', '111-111-1113']));

2 个答案:

答案 0 :(得分:0)

ints.lastIndexOf(largest)

此部分搜索largestints的最后一次出现。但是,largest始终是一个数字,但ints只包含字符串。因此,找不到该数字并返回undefined。要解决此问题,请将largest转换回字符串:

ints.lastIndexOf(largest.toString())

此外,您不需要拆分字符串并将它们连接在一起。

此代码正常运行:

var largestNumber = function(strings) {
  var ints = strings.map(function(el) {
    return el.replace(/-/g, '');
  });

  console.log(ints);

  var largest = Math.max.apply(Math, ints);

  return strings[ints.lastIndexOf(largest.toString())];
};

console.log(largestNumber(['111-111-1111', '111-111-1112', '111-111-1113']));

或者,您可以将字符串映射到数字:

var ints = strings.map(function(el) {
  return Number(el.replace(/-/g, ''));
});

答案 1 :(得分:0)

由于您已经在使用reduce(),为什么不使用一个reduce()来返回最高



var largestNumber = function(strings) {
    return strings.reduce(function(previousValue, currentValue) {
        return +currentValue.replace(/-/g,'') > 
               +previousValue.replace(/-/g,'') ? currentValue : previousValue;
    });
};

alert(largestNumber(['111-111-1111', '111-111-1112', '111-111-1113']));