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