数组中的第一个非负元素

时间:2014-01-20 02:35:37

标签: javascript arrays

嗨我有一个看起来像的数组:

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) {} 

我的代码逻辑是否正确?

3 个答案:

答案 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如果xundefined则总是返回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;
    }
}