我有两个数组idarrayarray,想在item_tosearch中找到idarray。然后使用找到的索引循环向前遍历idarray,直到找到一个不-1的元素。然后使用该索引从array检索值。
据我所知,如果你想继续检查,你可以使用任何形式的迭代forwhileforeach在这种情况下,我有两个数组。第一个用于idarray,第二个用于array。我已经设法检查了下一个数据是什么,以及数据是否达到了最终值。我也能得到我想要的下一个数据,只要id不是-1
我试过的:

var item_tosearch = 0;
var idarray = [-1, 2, -1, 4, -1]
var array = [3, 2, 1, 0, 7];
var index = array.indexOf(item_tosearch);

if (index > -1) {
  var res = array.slice(index);
}

if (res != undefined) {
  for (let i = 0; i < res.length; i++) {
    if (res[i + 1] != undefined) {
      if (idarray[index + 1] == -1) {
        if (res[i + 2] != undefined) {
          console.log("Next = " + res[i + 2]);
          break;
        } else {
          console.log("Final index");
          break;
        }
      } else {
        console.log("Next = " + res[i + 1]);
        break;
      }
    } else {
      console.log("Final index");
    }
  }
} else {
  console.log('data not found');
}

我的问题是,我有没有办法改进这个方法?
任何建议都是有价值的。
澄清:
如果我有以下信息:
Idarray=[-1,2,-1,4,1];
数组=[3,2,1,0,7];
我想要的是,如果我在item上加2作为值搜索,我希望将:0作为返回值,因为它是id中没有-1的下一个item。
另一个案子,如果我有:
Idarray=[-1,2,-1,-1,1];
数组=[3,2,1,0,7];
如果我在item_上输入2作为值搜索,那么我希望将:7作为返回值,因为它是下一个id中没有-1的项。
但是,如果为1, 2,1,- 1,- 1,如果用相同的2作为值。我希望“最终索引”会被返回。因为没有更多的项目没有-1作为id。
我尝试了另一个迭代来获取,但似乎没有得到我想要的:
var item_tosearch = 2;
var idarray = [-1, 2, -1, -1, -1]
var array = [3, 2, 1, 0, 7];
var index = array.indexOf(item_tosearch);

if (index > -1) {
  var res = array.slice(index);
}

if (res != undefined) {
  for (let i = 0; i < res.length; i++) {
    if (res[i + 1] != undefined) {
      if (idarray[index + 1] == -1) {
        for (let j = i + 1; j < res.length - i; j++) {
          if (res[j + 1] != undefined) { // fetch if still got data with id != -1
            console.log("Next = " + res[j + 1]); // should show next item without -1 in id
            break;
          } else {
            console.log("Final index"); // reach end of array
            break;
          }
        }
      } else {
        console.log("Next = " + res[i + 1]); // should show next item without -1 in id
        break;
      }
    } else {
      console.log("Final index"); // reach end of array
    }
  }
} else {
  console.log('data not found');
}

最佳答案

如果我能很好地理解你的问题,你就在寻找这样的东西。即使这不是你想要的解决方案,你也可以从中得到一些灵感。
此解决方案首先查找要在idarray中搜索的元素的索引。如果找不到,返回undefined
下一步,从1个更高的索引开始循环,直到idarray结束。如果找到一个不-1的元素,则从array返回当前索引上的元素。
如果未找到任何内容,则返回undefined

var idarray, array;

function giveThisABetterName(item_tosearch, idarray, array) {
  var index = idarray.indexOf(item_tosearch);
  if (index === -1) return; // data not found

  for (index += 1; index < idarray.length; ++index) {
    if (idarray[index] !== -1) return array[index];
  }

  // reach end of array
}

idarray = [-1, 2, -1, 4, 1];
array   = [ 3, 2,  1, 0, 7];
console.log(giveThisABetterName(2, idarray, array));

idarray = [-1, 2, -1, -1, 1];
array   = [ 3, 2,  1,  0, 7];
console.log(giveThisABetterName(2, idarray, array));

idarray = [-1, 2, -1, -1, 1];
array   = [ 3, 2,  1,  0, 7];
console.log(giveThisABetterName(9, idarray, array));

10-06 00:08