我有两个数组idarray
和array
,想在item_tosearch
中找到idarray
。然后使用找到的索引循环向前遍历idarray
,直到找到一个不-1
的元素。然后使用该索引从array
检索值。
据我所知,如果你想继续检查,你可以使用任何形式的迭代for
或while
或foreach
在这种情况下,我有两个数组。第一个用于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));