2016-08-10 14 views
0

配列の配列内の項目を探したい場合は、その項目を削除するというシナリオがあります。配列の配列内の項目を検索

a = [ [ 'Brian', 80 ], 
    [ 'Sue', 72 ], 
    [ 'Mary', 18 ], 
    [ 'Harry', 60 ], 
    [ 'Brian', 40 ] ]; 

Iは、本来の項目を検索し、私は[0]としない要素[1]、例えば私が知っている要素の値を知っているのindexOfを使用することはできませんしかし、それを除去するためにスプライスするのindexOfを使用して考えていました「ハリー」ではなく、彼の年齢:

index = a.indexOf(["Harry", ?]) 
a.splice(index, 1); 

他のシナリオでは、私はそれが値を更新し、それが存在しない場合は、それを作成する必要があります。しかしちょうど実現

編集 新しいプログラミングayncへの配列要素が処理されている配列のように変更することができる非同期ENVのインデックス項目番号Xがもはやないかもしれないので、X Iは、アイテムを削除する一つ又は二つのコマンド後に...

+0

削除するには:a = a.filter(x => x.indexOf( 'Harry')== -1) ' –

答えて

-2

は、あなたが新しい配列を返すか、元の1を変更したい場合は

a.forEach(function(x){ 
     if((x.indexOf("Brian")) === 0) a.splice([a.indexOf(x)],1) 
    }); 
+0

名前は知っていますが年齢ではありません。私は同じだけで検索する必要があります。 – Dercni

+0

ご迷惑をおかけしました。私はあなたが希望する値に "Brain"を変更したり、変数に変更することができると思った –

0

は異なり、リストから項目をスライスすることができます。

あなたがArray.prototype.filterを使用することができるマッチング要素なし新しい 1を返すようにしたい場合:

var newone = a.filter(function(val) { return val[0] !== 'Harry'; }); 

新しい要素を追加して、あなたもArray.prototype.concatを使用することができます新しい配列を返すには。

削除したい場合は一方で、/挿入/ の配列、正しい方法はArray.prototype.spliceを使用したりArray.prototype.push速くさの要素を交換するための最後に新しいアイテムを追加します。

// Reverse order because the array is re-indexed on splice 
for (var i = a.length - 1; i >= 0; i--) 
    if (a[i] === 'Harry') a.splice(i, 1); 

ところで安全な方法で配列を操作するには、lodashまたはunderscorejsのようなヘルパーライブラリを使用することを検討してください。

+0

val.indexOf( 'Harry')=== -1; 'be [val [0]にする!== 'Harry' ; '?年齢にはおそらく名前が含まれていません。 – nils

+0

最初のスロットyesだけを見たい場合は、 'val [0] === ...'を使います。フィルタ条件は、削除するには/ falseを保持するためにtrueを返さなければならないことに注意してください。 – Dario

+0

正確です。あなたが* Harryではないエントリをすべて保持したいとします(したがって、 'val [0]!== 'Harry';はハリーではない場合はtrueです)、https://jsfiddle.net/r37jc4rt/を参照してください。 。最初のスロットだけが関連しているときにすべてのスロットをチェックすると、バグの潜在的なソースのように見えます。 – nils