Javascript 从末尾索引数组

Javascript 从末尾索引数组,javascript,arrays,indexing,Javascript,Arrays,Indexing,我正在学习Javascript,我来自Python背景。 因此,我非常直观地尝试从末尾索引数组,即使用负索引。 从我目前所读到的内容来看,Javascript不支持它们。 然而,我发现了一些有趣的事情,但我无法理解背后的原因 todos = ['item1', 'item2', 'item3'] function updateTodos(index, new_value) { todos[index] = new_value console.log(todos) } func

我正在学习Javascript,我来自Python背景。 因此,我非常直观地尝试从末尾索引
数组
,即使用负索引。
从我目前所读到的内容来看,Javascript不支持它们。 然而,我发现了一些有趣的事情,但我无法理解背后的原因

todos = ['item1', 'item2', 'item3']

function updateTodos(index, new_value) {
    todos[index] = new_value
    console.log(todos)
}

function deleteTodos(index) {
    todos.splice(index)
    console.log(todos)
}

deleteTodos(-1)    
updateTodos(-1, 'new_item')
deleteTodos(-1)
输出

["item1", "item2"]
["item1", "item2", -1: "new_item"]
["item1", -1: "new_item"]
问:为什么
deletetetodos
能够删除正确的by索引,而
updateTodos
不能

问:我如何适应
updateTodos
中的这种负索引行为,以及处理
array
数据结构的任何函数

据我所知,
updateTodos
中的索引查找
index
变量,并更新该索引处的值(如果存在),否则会创建一个键值对。
splice
方法支持负索引,不是吗


如果您能澄清我的推理和/或提供有用的资源帮助我更好地理解这个概念,我将不胜感激。

根据MDN,splice确实支持负索引。

开始更改数组的索引(原点为0)。如果更大 超过数组长度时,实际起始索引将设置为 数组的长度。如果为负数,则将从 数组的结尾(原点为1)

所以,这就是为什么删除是有效的


要在更新中启用负索引,可以检查提供的参数是否为负。如果是,则使用
array.length+index
的简单方法可以获得类似python的索引。

1) 请记住,在使用splice时,如果未指定要删除的项目数量(第二个参数),则从指定的索引到数组末尾的所有内容都将被删除。从你的问题来看,我怀疑这是你想要的

2) Splice还可以用于将元素添加到数组(第三个参数、第四个参数等),这样可以很好地用于更新函数

解决这两个问题的完整示例如下:

function updateTodos(index, new_value) {
  todos.splice(index, 1, new_value);
}

function deleteTodos(index) {
  todos.splice(index, 1);
}

您甚至可以将它们结合到一个函数中,如果您指定一个值,则该值将被更新,否则将被删除,但这可能是不必要的。

谢谢。我的特别解决方案是检查索引是否为负数,并应用上面编写的公式,但我正在寻找一个可以执行更新的内置功能。有吗?据我所知,没有用于对数组进行反向索引的内置功能。