嗨我有一个看起来像的数组:
hrarray = [-9,-7,0,3,7,8]
我一直试图找出一个函数来选择数组中的第一个非负数(包含0)并返回索引(var elemid):
for (var i = 0, len=hrArray.length; i<len; i++) {
var num = hrArray[i];
if(num > 0) {
var elemid = i; //returns first non-negative element index
}
else if(num < 0) {}
我的代码逻辑是否正确?
答案 0 :(得分:0)
我没有看到你退回任何东西。
您可以通过一行获得第一个非负数:
for (var i = 0, len = arr.length; i < len && arr[i] < 0; i++);
基本上,我们在for-loop guard中检查否定值。一旦找到非负数就会中断,因此返回第一个非负数的i
。
更新#1(在函数中使用):
function getFirstNonNegative(arr) {
for (var i = 0, len = arr.length; i < len && arr[i] < 0; i++);
// Use a ternary operator
return (i === len) ? -1 : i; // If i === len then the entire array is negative
}
答案 1 :(得分:0)
我看到的主要问题是,一旦找到非负值,就不会突破循环。这可以使用break
语句完成,或者如果要立即退出函数,可以使用return
语句。
该功能应该看起来像这样:
function findNonNegative(arry) {
for (var i = 0, len = arry.length; i < len; i++) {
if(arry[i] >= 0)
return i;
}
return -1;
}
请注意,如果未找到非负元素,此方法将返回-1
。
稍微调整一下,可以缩短为:
function findNonNegative(arry) {
for (var i = 0; arry[i] < 0; i++);
return i < arry.length ? i : -1;
}
此版本利用for
循环的行为来测试循环内的值,并在找到所需的值后突破。它还取决于x < y
如果x
为undefined
则总是返回false的事实,从而确保我们不会以无限循环结束。如果没有找到非负元素,则最后一个条件表达式使返回值等于-1
;如果您在这种情况下返回值为return i;
,那么可以简化为arry.length
。
答案 2 :(得分:0)
您的代码将分配给elemid数组中的最后一个非负数。试试这个:
var elemid=-1; // elemid should be declared outside the for statement
for (var i = 0, len=hrArray.length; i<len; i++) {
if(hrArray[i] > 0) {
elemid = i; //returns first non-negative element index
break;
}
}