给定一个混合元素数组,我的函数需要返回该数组中的最小数字。
要求:
如果数组不包含数字,我无法通过测试返回0。这是我的代码:
function findSmallestNumberAmongMixedElements(arr) {
// your code here
if (arr.length === 0) return 0;
var shortest = arr.filter(function(a, b) {
return typeof a === 'number' && a - b;
});
return Math.min.apply(null, shortest);
}
var output = findSmallestNumberAmongMixedElements(['string', 'string']);
console.log(output); //=> Infinity (expected 0)

答案 0 :(得分:1)
传递给filter
的函数不带两个参数。您应该首先过滤数组以仅获取类型number
的元素,然后使用三元运算符返回最小值,如果该列表非空,则返回零:
function findSmallestNumberAmongMixedElements(array) {
array = array.filter(function (e) { return typeof e === 'number' })
return array.length ? Math.min.apply(null, array) : 0
}
console.log(
findSmallestNumberAmongMixedElements(['10', 'the']) //=> 0
)
console.log(
findSmallestNumberAmongMixedElements([10, 'the']) //=> 10
)
答案 1 :(得分:0)
过滤后需要检查长度
function findSmallestNumberAmongMixedElements(arr) {
// your code here
var shortest = arr.filter(function(a) {
return !isNaN(a);
});
if (shortest.length === 0) return 0;
return Math.min.apply(null, shortest);
}
console.log(findSmallestNumberAmongMixedElements(["foo", "bar", 1]));
console.log(findSmallestNumberAmongMixedElements(["foo", "bar"]));
console.log(findSmallestNumberAmongMixedElements(["foo", "bar", 1, 2, 3]));
console.log(findSmallestNumberAmongMixedElements(["foo", "bar", 4, 6, 7]));

请注意,使用!isNaN()
会将以字符串形式传递的数字转换为>
console.log(findSmallestNumberAmongMixedElements(["foo", "bar", "4"]) // 4
所以请保持检查
return typeof a === 'number'
如果你想确定一个号码仅作为号码传递 - >
console.log(findSmallestNumberAmongMixedElements(["foo", "bar", "4"]) // 0
答案 2 :(得分:-1)
这将返回正确的。
function findSmallestNumberAmongMixedElements(arr) {
var shortest = arr.filter(function (a, b) {
return typeof a === 'number' ? 0 : a - b;
});
if (shortest.length === 0) return 0;
return Math.min.apply(null, shortest);
}