我有两个数组 idarray
和 array
并且想在 idarray
中找到 item_tosearch
。然后使用找到的索引循环向前遍历 idarray
,直到找到一个不是 -1
的元素。然后使用该索引从 array
中检索值。
据我所知,如果你想继续检查,你可以使用任何类型的迭代 for
或 while
或 foreach
在此案例,我有 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/