可以在数组中找到与当前编号不同的先前编号吗?

时间:2018-08-10 05:12:39

标签: jquery arrays

我目前有一个项目,该项目的项目级别在每次运行函数时都被推送到数组中。我想知道是否要说例如当前数字是2,是否有办法返回阵列中当前具有的物料级别,并检查阵列中最后一个不同于2的数字。 >

因此,如果找到3、4、6、1000等,则会返回该数字,因为该数字不等于当前数字。我提供了最终数组结果的屏幕截图,以便可能对全局有帮助。

我也希望它沿着数组返回并在找到不同的数字时停止,因为否则它将只是一个简单的每个循环,它将检查数组中的任何数字是否不同。

我尝试过想办法,但是我想不出解决方案。预先感谢。

My Array Result

2 个答案:

答案 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。