0

次のような 2 次元配列があります。

all = [
    [bla, bla, ID1, bla, bla],
    [bla, bla, ID2, bla, bla],
    [bla, bla, ID3, bla, bla],
    [bla, bla, ID4, bla, bla],
    [bla, bla, ID5, bla, bla],
    [bla, bla, ID6, bla, bla]
]

次に、次のような 1 次元配列があります。

selected = [ID1, ID2, ID6]

allID 値が配列内のどの ID とも一致しないすべてのエントリを配列から削除する必要がありますselected。上記の例から、次のような新しい配列を取得します。

reduced = [
    [bla, bla, ID1, bla, bla],
    [bla, bla, ID2, bla, bla],
    [bla, bla, ID6, bla, bla]
]

このような配列を取得するにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

2

これを使用して1行にすることができますArray.prototype.filter

var reduced = all.filter(function (a) {return selected.indexOf(a[2]) !== -1;});

all[i][2]これは、 (ID列の値)が選択した配列にある場合、このエントリを保持することを意味します。新しいアレイを構築するためallselectedこのプロセスの影響を受けません。

関数のオーバーヘッドが少なくなるため、ループを使用して同じテストを実行する方が少し速い場合があります。

var reduced = [], i = 0;
for (; i<all.length; ++i)
    if (selected.indexOf(all[i][2]) !== -1)
        reduced[reduced.length] = all[i];
于 2013-01-10T13:40:38.077 に答える