2017-05-14 8 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"] 

Q:なぜdeleteTodosupdateTodosがいない間インデックスで正しいを削除することができますか?

Q: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

ありがとうございました。私のアドホックな解決策は、インデックスが否定的であるかどうかをチェックし、上記の式を適用することでしたが、私はアップデートを実行できる組み込みの機能を探しています。 1つはありますか? –

+0

私が知る限り、配列を逆索引付けするための組み込み機能はありません。 – squgeim

0

2:

1)スプライスを使用しているときは、あなたが(第二引数を削除するには、アイテムの量を指定しない場合ということを覚えておいてください)インデックスから、その後すべてあなたがする指定配列の終わりが削除されます。あなたの質問から、私はこれがあなたが望むものであると疑う。

2)Spliceを使用して配列に要素を追加することもできます(3番目の引数、4番目の引数など)。

両方の問題を解決するための完全な例は次のようになります:

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

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

あなたも、手の込んだ取得し、あなたが、その後値を指定した場合、それが削除される他更新される一つの機能にそれらの両方を組み合わせることができ、おそらく不要です。

関連する問題