javascript - 如何继续检查数组直到满足特定条件

标签 javascript arrays typescript optimization

我有两个数组 idarrayarray 并且想在 idarray 中找到 item_tosearch。然后使用找到的索引循环向前遍历 idarray,直到找到一个不是 -1 的元素。然后使用该索引从 array 中检索值。

据我所知,如果你想继续检查,你可以使用任何类型的迭代 forwhileforeach 在此案例,我有 2 个数组。第一个用于 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];

我想要的是,如果我将 2 作为值放在 item_tosearch 上,我希望有:0 作为返回值,因为它是 ID 中没有 -1 的下一个项目。


另一种情况,如果我有:

idarray = [-1, 2, -1, -1, 1]; 数组 = [3, 2, 1, 0, 7];

如果我将 2 作为值放在 item_tosearch 上,我期望有: 7 作为返回值,因为它是 ID 中没有 -1 的下一个项目。

但是如果 idarray 是 = [-1, 2, -1, -1, -1] 并且 item_tosearch 上的值是相同的 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));

关于javascript - 如何继续检查数组直到满足特定条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57692473/

相关文章:

用于匹配数组中数字的 JavaScript 正则表达式

javascript - 如何提取数组的偶数元素?

C++ 2D数组内存分配

angular - 如何清除 Angular 中的 div 内容? ( Angular 7)

Angular >2 Subject 直接订阅还是使用方法?

javascript - Backbone Collection fetch() 方法在重复调用时覆盖以前的模型

javascript - 任何客户端 JavaScript 框架都可以与 Node.js+Express.js+socket.io.js 很好地集成吗?

Javascript 返回 "matched"数组在数组中的位置索引

java - 将数组对象推送到 Array 或 ArrayList 并从 Android 中的另一个类访问它

typescript - 使用 typescript 别名时如何初始化空数组?