Javascript 混合元素小数-JS
嗨,我正在创建一个函数,返回给定数组中的最小数。如果数组不包含数字,则应返回0 以下是我的功能: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
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,对吗?