我有一个包含值的数组,并且我有该数组的当前活动值。活动值是某个位置的中间值。我需要从活动数组返回,并获得第一个非零值的索引。考虑到我有一个函数来获取活动值之前和之后的值。例如:
myarray = [300,250,700,0,0,0,500(activeValue),700,300]
我需要从活动值开始,向后检查第一个非零值。我该怎么做。请帮忙。
这就是我尝试的方式
for (i = previousPlayerSeat; i <= nextPlayerSeat; i--){
if (this.seats[i] !== null){
do {
this.lastPlayerToAct = i;
}
while (this.seats[i].public.chipsInPlay === 0)
}
}
只需执行:
let firstNonZeroValue;
for(let i = myarray.indexOf(value); i > 0; i--) {
if(myarray[i] !== 0) {
firstNonZeroValue = myarray[i];
break;
}
}
firstNonZeroValue && console.log(`Found a non-zero value: ${firstNonZeroValue}`);
请注意,在未排序的数组中查找与值匹配的第一个索引的最有效方法是按顺序遍历列表,即O(n(。因此,该解的big-O复杂度是O(n([对于索引搜索]+O(n。
如果我理解正确,您不希望在活动值之前获得第一个非零值。所以在上面的myarray
上,active
的值是500
——您想要得到700
。
你可以做
const activeValue = 500;
const myarray = [300, 250, 700, 0, 0, 0, 500, 700, 300];
// get active value's index
const activeValueIndex = myarray.findIndex((value) => value === activeValue);
// get the reversed section of array that excludes
// active value and its subsequents
const arrayToSearch = myarray.slice(0, activeValueIndex).reverse();
// console.log(arrayToSearch); // [0, 0, 0, 700, 250, 300]
// get the first non zero from arrayToSearch
const firstNonZeroValue = arrayToSearch.find((value) => value !== 0);
console.log(firstNonZeroValue);