【发布时间】:2019-08-28 12:29:52
【问题描述】:
我有两个数组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];
我想要的是,如果我将 item_tosearch 上的 2 作为值,我希望将:0 作为返回值,因为它是下一个在 id 中没有 -1 的项目。
另一种情况,如果我有的话:
idarray = [-1, 2, -1, -1, 1]; 数组 = [3, 2, 1, 0, 7];
如果我在 item_tosearch 上输入 2 作为值,我希望返回值: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');
}
【问题讨论】:
-
您能用文字解释一下您要计算的内容吗?您似乎想知道某些值是否仍然存在,但是通过比较
res和idarray的长度应该很容易。因此,您能更好地解释逻辑吗?因为我们可能可以使用.forEach()、.filter()和.find()等数组方法对其进行编码,从而使整体更具可读性。 -
@Shilly 实际上,array 和 idarray 是基于同一级别的。但是我从前端值获取 id 而数组来自后端,如果 id 不是-1,我会计算下一个项目。如果是,那么我将获取下一个项目。但是您可以注意到,如果 idarray 值更改为: [-1, 2, -1, -1, -1] 和 pos 到 2,您会发现它没有返回“最终索引”控制台,因为我需要递归增加+ 值在:
if (res[i + 2] != undefined) { console.log("Next = " + res[i + 2]);但我还没有设法这样做。我希望这已经足够清楚了。 -
@Shinjo 我不认为你明白这一点。您讲述了太多细节,而我们不知道您尝试使用当前代码实现什么。我们可以尝试对您的问题进行逆向工程,但大多数人没有时间或意愿这样做。让我给你一个简短的例子:我有两个数组,并试图找出这些数组是否共享任何元素。我目前有以下代码:...我当前的问题是...
-
@3limin4t0r 对不起,m_m 我已经添加了具有某些值时期望的示例。又一次尝试迭代它。
-
@Shinjo 这已经好多了。 ??????
标签: javascript arrays typescript optimization