编写单个函数,输出输入数组中的“最大”电话号码(如果多个数字同样大,则返回最后一个)。假设电话号码是由破折号分隔的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']));
答案 0 :(得分:0)
ints.lastIndexOf(largest)
此部分搜索largest
中ints
的最后一次出现。但是,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']));