从末尾对数组进行索引
我在学习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
方法支持负向索引,不是吗?
如果你能澄清我的推理和/或帮助我用有用的资源来更好地理解这个概念,我将不胜感激。
根据MDN,拼接确实支持负向索引。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
从哪里开始改变数组(带有原点0)的索引。如果数组的长度大于 ,则实际的起始索引将被设置为数组的长度 。如果为负值,则会从数组末尾开始计算 中的很多元素(与原点1)。
所以,这就是为什么要删除作品。
要在更新中启用负向索引,您可以检查提供的参数是否为负数。如果是这样,这是一个简单的方式使用array.length + index
有类似python的索引。
两件事情要添加到接受的答案:
1)请记住,使用拼接的时候,如果你没有指定要删除的项目(第二个参数的量),那么一切从索引您指定数组的末尾将被删除。从你的问题我怀疑这是你想要的。
2)拼接也可以用来添加元素到一个数组(第三个参数,第四个参数等),因此可以很好地为您的更新功能。
一个完整的例子来解决这两个问题会是这样的:
function updateTodos(index, new_value) {
todos.splice(index, 1, new_value);
}
function deleteTodos(index) {
todos.splice(index, 1);
}
你可以得到更炫和他们都在那里,如果你指定,然后一个值,被其他人更新它被删除合并成一个功能,但可能没有必要。
谢谢。我的临时解决方案是检查索引是否为负值并应用上面编写的公式,但我正在寻找可执行更新的内置功能。有一个吗? –
据我所知,没有内置的反向索引数组的功能。 – squgeim