2017-05-14 108 views
0

我在学习Javascript,我来自Python背景。 因此,我试图从末端尝试索引array,即使用负指数,这是相当直观的。
从我目前阅读的内容来看,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"] 

问:为什么deleteTodos能够通过索引删除正确而updateTodos是不是?

问:我怎样才能适应这种在updateTodos中负向索引的行为,以及一般处理array数据结构的任何函数?

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

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

回答

1

根据MDN,拼接确实支持负向索引。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

从哪里开始改变数组(带有原点0)的索引。如果数组的长度大于 ,则实际的起始索引将被设置为数组的长度 。如果为负值,则会从数组末尾开始计算 中的很多元素(与原点1)。

所以,这就是为什么要删除作品。

要在更新中启用负向索引,您可以检查提供的参数是否为负数。如果是这样,这是一个简单的方式使用array.length + index有类似python的索引。

+0

谢谢。我的临时解决方案是检查索引是否为负值并应用上面编写的公式,但我正在寻找可执行更新的内置功能。有一个吗? –

+0

据我所知,没有内置的反向索引数组的功能。 – squgeim

0

两件事情要添加到接受的答案:

1)请记住,使用拼接的时候,如果你没有指定要删除的项目(第二个参数的量),那么一切从索引您指定数组的末尾将被删除。从你的问题我怀疑这是你想要的。

2)拼接也可以用来添加元素到一个数组(第三个参数,第四个参数等),因此可以很好地为您的更新功能。

一个完整的例子来解决这两个问题会是这样的:

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

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

你可以得到更炫和他们都在那里,如果你指定,然后一个值,被其他人更新它被删除合并成一个功能,但可能没有必要。