2017-05-14 187 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); 
} 

你可以得到更炫和他們都在那裏,如果你指定,然後一個值,被其他人更新它被刪除合併成一個功能,但可能沒有必要。