我目前有一个项目,该项目的项目级别在每次运行函数时都被推送到数组中。我想知道是否要说例如当前数字是2,是否有办法返回阵列中当前具有的物料级别,并检查阵列中最后一个不同于2的数字。 >
因此,如果找到3、4、6、1000等,则会返回该数字,因为该数字不等于当前数字。我提供了最终数组结果的屏幕截图,以便可能对全局有帮助。
我也希望它沿着数组返回并在找到不同的数字时停止,因为否则它将只是一个简单的每个循环,它将检查数组中的任何数字是否不同。
我尝试过想办法,但是我想不出解决方案。预先感谢。
答案 0 :(得分:1)
一种直接的解决方案是使用从最后一个索引开始迭代的循环,并从右边返回第一个索引的值,该值与最后一个索引的值不同:
const arr = [1, 2, 2, 3, 1, 1, 2, 3, 1, 1, 1];
function findLast() {
const lastNum = arr[arr.length - 1];
for (let i = arr.length - 2; i >= 0; i--) {
if (arr[i] !== lastNum) return arr[i];
}
}
console.log(findLast())
效率较低但可读性更高的解决方案是反转数组和.find
:
const arr = [1, 2, 2, 3, 1, 1, 2, 3, 1, 1, 1];
function findLast() {
const lastNum = arr[arr.length - 1];
return [...arr].reverse().find(item => item !== lastNum);
}
console.log(findLast())
或者更好的是,当push
进入数组时,检查被推送的项目是否不同于上一个值,如果是,则设置变量lastValue
和{{1 }}。然后,当您需要nextToLastValue
时,只需访问它即可。
答案 1 :(得分:0)
我不确定“当前”数字是什么意思,所以我们只说它是您想要的任意索引。在这种情况下,
function findPreviousDifferent(array, current) {
for(let i=current-1; i>=0; i--) {
if(array[current] !== array[i])
return array[i];
}
return null;
}
如果我正确理解了您想要的内容,那就应该这样做。我不知道如果每个先前的元素都等于current,或者如果current是该问题的第一个元素,那么您想要它做什么,所以它只会返回null。