Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS将数组向下递增1 let span=document.querySelector('.myspan')) 设arr=[1,2,3] document.addEventListener('keydown',函数(事件){ var x=arr.length 如果(event.keyCode==40){//down span.innerHTML=arr[x-1] x-- } })_Javascript - Fatal编程技术网

Javascript JS将数组向下递增1 let span=document.querySelector('.myspan')) 设arr=[1,2,3] document.addEventListener('keydown',函数(事件){ var x=arr.length 如果(event.keyCode==40){//down span.innerHTML=arr[x-1] x-- } })

Javascript JS将数组向下递增1 let span=document.querySelector('.myspan')) 设arr=[1,2,3] document.addEventListener('keydown',函数(事件){ var x=arr.length 如果(event.keyCode==40){//down span.innerHTML=arr[x-1] x-- } }),javascript,Javascript,在键盘上按下down时,量程应显示arr数组的最后一项。这里的问题是,当您再次按下时,x值始终是相同的3,因此如何成功地将其减1,以便我可以在第二次按下时看到最后一个之前的项目,依此类推?.pop从数组中删除最后一个元素并返回它 let span = document.querySelector('.myspan') let arr = [1, 2, 3] document.addEventListener('keydown', function(event){ var x = arr.l

在键盘上按下
down
时,量程应显示
arr
数组的最后一项。这里的问题是,当您再次按下时,x值始终是相同的
3
,因此如何成功地将其减1,以便我可以在第二次按下时看到最后一个
之前的项目,依此类推?

.pop从数组中删除最后一个元素并返回它

let span = document.querySelector('.myspan')
let arr = [1, 2, 3]

document.addEventListener('keydown', function(event){
  var x = arr.length
  if (event.keyCode === 40) { // down
    span.innerHTML = arr[x-1]
    x--
  }
})

<span class="myspan"></span>

您正在减小
x
的值,而不是
arr.length
的值

x
不是对
arr.length
的引用

从数组中读取最后一个值,然后作为两个独立的操作降低该值,这是解决该问题的一种非常冗长的方法。就用吧

你可以:

  • 有一个你记得你的位置的变量,或者

  • 修改数组

  • 对于#1,您可以从(例如)开始

    旁边
    arr
    。然后在事件处理程序中:

    let pos = arr.length;
    
    对于#2,如果要修改数组,可以使用
    pop
    方法获取最后一个条目并将其删除。因此:

    if (pos > 0) {
        span.innerHTML = arr[--pos]; // `--pos` modifies `pos`, then uses the result
    }
    

    您可以添加一个全局变量
    indexLocation
    ,该变量将在按下向下按钮时不断调整。我添加了一个额外的函数
    adjustIndexLocation()
    ,用于进行必要的计算

    let span=document.querySelector('.myspan'))
    设arr=[1,2,3]
    var指数位置=-1;
    document.addEventListener('keydown',函数(事件){
    var arrayLength=阵列长度;
    如果(event.keyCode===40){
    调整索引位置(排列长度);
    span.innerHTML=arr[indexLocation];
    }
    })
    功能调整索引位置(阵列长度){
    索引定位--;
    如果(索引位置<0)
    索引位置=阵列长度-1;
    }

    var x
    永远不会打印数组中最后一项以外的任何内容。如果要持久化其值,请在事件侦听器外部声明它。您正在侦听器内部初始化x。这是你的问题。也可以使用let和const而不是var。好的编程将一个变量保留在侦听器之外,并在每次按键时将其递减。问题是我的数组有一组数据,这些数据是由其他事件动态添加的。。。所以我在数组中添加了它,以确保数组包含所有数据。当用户不断按下时,是否希望数组值在第一个元素处停止?这通常在假设我的数组位于事件侦听器之外的情况下起作用,但问题是我的数组包含一组由其他事件动态添加的数据。。。所以我在里面添加了它,以确保数组包含所有数据。不会在外面工作。我不明白这里的否决票。我们(在回答时)不知道用户是否希望保持数组不变(实际上,我想我现在也不知道)不过,似乎有人对此有相当坚定的看法。
    let pos = arr.length;
    
    if (pos > 0) {
        span.innerHTML = arr[--pos]; // `--pos` modifies `pos`, then uses the result
    }
    
    if (arr.length) {
        span.innerHTML = arr.pop();
    }