Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 混合元素小数-JS_Javascript_Arrays - Fatal编程技术网

Javascript 混合元素小数-JS

Javascript 混合元素小数-JS,javascript,arrays,Javascript,Arrays,嗨,我正在创建一个函数,返回给定数组中的最小数。如果数组不包含数字,则应返回0 以下是我的功能: function findSmallestNumberAmongMixedElements(arr){ if(arr.length === 0 && typeof arr === 'string'){ return 0; } else{ return Math.min.apply(null, arr); //min=1

嗨,我正在创建一个函数,返回给定数组中的最小数。如果数组不包含数字,则应返回0

以下是我的功能:

function findSmallestNumberAmongMixedElements(arr){
      if(arr.length === 0 && typeof arr === 'string'){
        return 0;
      } else{
         return Math.min.apply(null, arr); //min=1
      }
    }
    var output = findSmallestNumberAmongMixedElements([4, 'lincoln', 9, 'octopus']);
    console.log(output); // --> 4
现在我的答案是NAN而不是4。你知道我做错了什么吗?

typeof arr===“string”
如果你通过一个数组,它将始终是
false
(数组是否包含字符串与该测试无关)

您应该首先使用
filter
从数组中过滤出数字,然后在过滤后的数组中调用
Math.min

函数findCallestNumberMongMixedElements(arr){
var onlyNumbers=arr.filter(e=>typeof e==“number”);//只筛选出数字项
如果(onlyNumbers.length==0)返回0;//如果没有数字,则返回0
返回Math.min.apply(null,onlyNumbers);//否则返回它们的最小值
}
var输出=FindCallestNumberMongMixedElements([4'林肯',9'章鱼']);

console.log(输出);//-->4
当您尝试将
Math.min
应用于同时包含
string
number
值的输入数组时,当前函数可能会生成
NaN
Math.min
只能处理数字输入,因此
字符串的存在可能会导致它返回
NaN
错误值

有一个简单的解决方案:从数组中过滤掉所有非
number值。我们可以检查过滤数组的长度以查看是否有任何非数值,如果有,请毫无疑问地应用
Math.min

函数findCallestNumberMongMixedElements(arr){
var FILTED=arr.filter(功能(el){
返回类型el=='number';
});
如果(过滤的长度>0){
返回Math.min.apply(数学,过滤);
}否则{
返回0;
}
}
[
[4,‘林肯’,9,‘章鱼’,//4
[],                           // 0
[a',3,2],//2
['h','i'],//0
['-3', 3],                    // 3
].forEach(函数(输入){
log(输入,FindCallestNumberMongMixedElements(输入));

});
在您的
Math.min.apply(null,arr)
中,您将获得
NaN
,因为数组中有字符串

您的
typeof arr===“string”
不会在数组中循环以排除数组中的字符串值

要实现目标,您需要做的是可能只执行
for
循环或
forEach
循环:

function findSmallestNumberAmongMixedElements(arr){
    var min = Infinity;

    // if argument is not array or array has no value
    if (arr.constructor !== Array || arr.length === 0){
        min = 0;
        return min;
    }

    /* for loop */
    for (var i = 0, len = arr.length; i < len; i++){
        if (arr[i] === 0 || typeof arr[i] !== 'number') continue;
        min = Math.min(min, arr[i]);
    }

    /* forEach loop */
    arr.forEach(function(value, index){
        if (value === 0 || typeof value !== 'number') return;
        min = Math.min(min, value);
    });

    return min;
}

var output = findSmallestNumberAmongMixedElements([4, 'lincoln', 9, 'octopus']);
console.log(output); // --> 4
函数findCallestNumberMongMixedElements(arr){
var min=无穷大;
//如果参数不是数组或数组没有值
if(arr.constructor!==Array | | arr.length==0){
最小值=0;
返回最小值;
}
/*for循环*/
对于(变量i=0,len=arr.length;i4.

我认为在将数组提交给Math.min之前,您应该先过滤数组

试试下面的方法

function isNumber (obj) {
    return obj!== undefined && typeof(obj) === 'number' && !isNaN(obj); 
}

function smallestInMixedArray (arr) {
   if (arr.length === 0 || !arr.filter) {
        return 0; 
   } else { 
        arr = arr.filter(isNumber)
        return Math.min.apply(null, arr); //min=1 
   } 
}

var output = smallestInMixedArray([4, 'lincoln', 9, 'octopus']);
console.log(output); // --> 4

我喜欢您的解决方案,但如果数组中没有项,则不会返回0,对吗?