当数组

时间:2017-03-17 20:07:35

标签: javascript arrays

给定一个混合元素数组,我的函数需要返回该数组中的最小数字。

要求:

  • 如果给定的数组为空,则应返回0.
  • 如果数组不包含数字,则应返回0.

如果数组不包含数字,我无法通过测试返回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)




3 个答案:

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