0

特定のサブ配列を含む配列を除外する JavaScript を作成しています。もちろん自分で関数を書くこともできますが、それを行うための組み込み関数がjavascriptまたは他のjavascriptライブラリに既に存在するかどうか、またはほんの数行でそれを行う簡単な方法があるかどうかに興味があります。

サブ配列のすべての要素が一意であれば、underscore.js を使用できることがわかりました。交差機能があり、交差後の長さをチェックして、長さが正しいかどうかを確認できます。ただし、サブ配列に繰り返し値がある場合、その関数は失敗します。

例えば、

_.intersection([1, 2, 3, 4, 5], [2, 1]);

これは [1, 2] を返し、長さをチェックすることで、この配列にサブ配列が含まれていることがわかります。

ただし、サブ配列に繰り返し値がある場合、

_.intersection([1, 1, 2, 3, 4, 7, 10], [1, 1, 2]);
_.intersection([1, 2, 3, 4], [1, 1, 2]);

どちらも [1, 2] を返し、ケースを区別できません。

私が使用できる他のビルド済み関数はありますか、それとも数行で簡単に実行できる方法はありますか?

4

1 に答える 1

2

これを試して:

function contains(a, b) {
    // sort arguments
    if(a.length < b.length) {
        var temp = a;
        a = b;
        b = temp;
    }
    // copy array
    a = a.slice();
    return b.every(function(elm) {
        var index = a.indexOf(elm);
        if(index !== -1) {
            // remove the found element
            a.splice(index, 1); 
            return true;
        }
        return false;
    });
}

console.log(contains([1, 1, 2], [1, 2, 3, 4, 7, 10])); // logs false
console.log(contains([1, 1, 2], [1, 1, 2, 3, 4, 7, 10])); // logs true
console.log(contains([1, 2, 3, 4, 7, 10], [1, 1, 2])); // logs false
console.log(contains([1, 1, 2, 3, 4, 7, 10], [1, 1, 2])); // logs true

ここにデモがあります

于 2014-10-13T20:06:47.307 に答える