2011-08-10 14 views
8

JavaScriptで値を指定する配列からの要素の削除:私はこの質問読んだ

Deleting array elements in JavaScript - delete vs splice

そして除去するために、スプライスおよび削除の両方が要素のインデックスを必要とすること、それが表示されるので、どのように私は値を持っているときに簡単にインデックスを見つけることができますか?

["test1", "test2", "test3"] 

と私はTEST2を削除したい:私はこのようになります配列を持っている場合、例えば

。私が今使っているプロセスは正しい方法ではないと思っていますが、配列内の各要素の値を確認し、プロセスを介してカウンタを維持して(インデックス参照として使用しています)、$.each値が "test2"に等しい場合は、インデックスをカウンタの形で使用し、スプライスを使用してそれを削除します。

アレイのサイズが大きくなっても、これは遅いプロセスだと思いますが、どのような選択肢がありますか?

あなたがアイテムを削除する splice()機能を使用したい
+1

あなたが望むものは 'indexOf'を参照してください。 –

+0

あなたの要素はソート可能ですか? – VirtualTroll

答えて

4

indexOfは配列でそれを見つける:

は、アレイ内の特定の要素を検索するには:を削除するかを知るために

var index = array.indexOf('test2'); 

全例:

var array = ['test1', 'test2', 'test3']; 
var value_to_remove = 'test2'; 
array.splice(array.indexOf(value_to_remove), 1); 

Working Demo

+0

彼はそれを知っています。彼が知りたいのは、スプライスでUSEへのインデックスを見つける方法です。 –

+0

josh.trowとRionmonsterありがとう! –

+0

あなたの問題を解決したいと思っていますピート: –

0

underscore.js良いユーティリティ機能の多くの本当に素晴らしい小さなライブラリです。この場合、#rejectが適切です。

http://documentcloud.github.com/underscore/#reject

(内部メソッドはもちろん、あなたのマニュアルインデックス検索とスライス/スプライスと同様であるが)。

3
var array = ["test1", "test2", "test3"]; 
array.splice(array.indexOf("test2"), 1); 

indexOfsource):
は、与えられた要素が配列中に見出さ、または可能な-1が存在しない場合は、最初のインデックスを返します。

1

Array#indexOfを使用して要素を値で検索し、結果のインデックスを使用します。古いブラウザでは使用できない可能性がありますので、そこにあるかどうかをチェックし、チェックしない場合はMDCの  — here's some codeを追加して追加してください。

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
     "use strict"; 
     if (this === void 0 || this === null) { 
      throw new TypeError(); 
     } 
     var t = Object(this); 
     var len = t.length >>> 0; 
     if (len === 0) { 
      return -1; 
     } 
     var n = 0; 
     if (arguments.length > 0) { 
      n = Number(arguments[1]); 
      if (n !== n) { // shortcut for verifying if it's NaN 
       n = 0; 
      } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { 
       n = (n > 0 || -1) * Math.floor(Math.abs(n)); 
      } 
     } 
     if (n >= len) { 
      return -1; 
     } 
     var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 
     for (; k < len; k++) { 
      if (k in t && t[k] === searchElement) { 
       return k; 
      } 
     } 
     return -1; 
    } 
} 

あなたがそのようなArrayプロトタイプに物事を追加した場合、彼らが表示されますので、彼らは唯一の(つまり、incorrectが、共通for..inループである)配列インデックスを参照してくださいよと仮定for..inループが問題を抱えてスタートすることに注意してください文字列 "indexOf"は、配列インデックスを参照することを期待している場合、詳細はthis blog postを参照してください。

2

あなたができるjQueryの$.inArrayとあなたの$.eachループを取り除く、それはクロスブラウザ(Array.indexOfとは違って)動作します:

var index = $.inArray("test2", ["test1", "test2", "test3"]); // 1 

(私はあなたの質問が「jQueryの」でタグ付けされていません実現しますが、あなたはすでに$.eachループを使用していると言います)。

+0

これは素晴らしいです、ありがとう! –

関連する問題